Pagini recente » Cod sursa (job #2478057) | Cod sursa (job #1906582) | Cod sursa (job #3130267) | Cod sursa (job #2612817) | Cod sursa (job #468815)
Cod sursa(job #468815)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NMAX 105
#define LMAX 1005
int n,m,sol[NMAX];
struct muchie
{
int a,b,c;
};
muchie A[LMAX];
void read()
{
scanf("%d%d",&n,&m);
int i;
for (i=1; i<=m; i++)
scanf("%d%d%d",&A[i].a,&A[i].b,&A[i].c);
}
bool eval(int t)
{
int x=A[t].c,y=A[t].a,z=A[t].b;
if (x==0)
return sol[y] & sol[z];
if (x==1 && sol[y]==0 && sol[z]==1)
return 0;
if (x==2 && sol[z]==0 && sol[y]==1)
return 0;
if (x==3)
return !sol[y] | !sol[z];
return 1;
}
void solve()
{
srand(time(0));
int i,j,found,failed,nr1=0;
for (i=1; i<=n; i++)
{
sol[i]=rand()%2;
if (sol[i])
nr1++;
}
for (i=1; i<=n*20; i++)
{
found=1;
for (j=1; j<=m; j++)
if (!eval(j))
{
found=0;
failed=j;
break ;
}
if (found && nr1>0)
return ;
if (found)
failed=1;
if (rand()%2==0)
{
sol[A[failed].a]^=1;
if (sol[A[failed].a])
nr1--;
else
nr1++;
}
else
{
sol[A[failed].b]^=1;
if (sol[A[failed].b])
nr1--;
else
nr1++;
}
}
}
void show()
{
int i,nr=0;
for (i=1; i<=n; i++)
if (sol[i])
nr++;
printf("%d\n",nr);
for (i=1; i<=n; i++)
if (sol[i])
printf("%d\n",i);
}
int main()
{
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
read();
solve();
show();
return 0;
}