Pagini recente » Cod sursa (job #4960) | Cod sursa (job #28353) | Cod sursa (job #28198) | Cod sursa (job #3283004) | Cod sursa (job #29352)
Cod sursa(job #29352)
#include<stdio.h>
#include<string.h>
#define NMAX 101
int n,v[NMAX],uz[NMAX],a[NMAX][NMAX],coada[NMAX];
void citire(void)
{
int i,m,x,y,z;
scanf("%d %d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&z);
if(!z) z=4;
if(z>=3)
{
a[x][y]=z;
a[y][x]=z;
}else if(z==1) a[y][x]=1;
else a[x][y]=1;
}
}
int sol(int k)
{
memset(v,0,(n+1)*sizeof(int));
memset(uz,0,(n+1)*sizeof(int));
memset(coada,0,(n+1)*sizeof(int));
v[k]=1;
uz[k]=1;
int i,x=0,y=1;
coada[1]=k;
while(x<y)
{
k=coada[++x];
for(i=1;i<=n;++i)
if(a[i][k])
{
if(a[i][k]==3 && v[k])
{
if(uz[i] && v[i]) return 0;
v[i]=0;
if(!uz[i])
{
uz[i]=1;
coada[++y]=i;
}
}else if(a[i][k]==4 && !v[k])
{
if(uz[i] && !v[i]) return 0;
v[i]=1;
if(!uz[i])
{
uz[i]=1;
coada[++y]=i;
}
}else if(!v[i])//a[i][k]==1
{
if(uz[i] && v[i]) return 0;
v[i]=0;
if(!uz[i])
{
uz[i]=1;
coada[++y]=i;
}
}
}
}
return 1;
}
int solutie(void)
{
int i=0,nr=0;
do{++i;}while(!sol(i));
for(i=1;i<=n;++i)
nr+=v[i];
return nr;
}
void afisare(void)
{
int i;
printf("%d\n",solutie());
for(i=1;i<=n;++i)
if(v[i]) printf("%d\n",i);
}
int main(void)
{
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
citire();
afisare();
fclose(stdin);
fclose(stdout);
return 0;
}