Pagini recente » Cod sursa (job #1280536) | Cod sursa (job #2776367) | Cod sursa (job #825976) | Cod sursa (job #1968347) | Cod sursa (job #4821)
Cod sursa(job #4821)
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define _fin "party.in"
# define _fout "party.out"
# define maxn 102
# define maxm 1002
int part[maxn], cond[maxm][3];
int n, m;
void readf()
{
freopen(_fin, "r", stdin);
int i=1;
for (scanf("%d %d", &n, &m); i<=m; i++)
scanf("%d%d%d", &cond[i][0], &cond[i][1], &cond[i][2]);
}
int booleq(int x, int y, int type)
{
switch (type)
{
case 0 : return x | y;
case 1 : return x | (!y);
case 2 : return (!x) | y;
case 3 : return (!x) | (!y);
}
return 270188; // never
}
void constraint(int num)
{
if ( num == m+1 )
{
int sol[maxn], i;
for (sol[0]=0, i=1; i<=n; i++)
if ( part[i]==1 )
sol[ ++sol[0] ]=i;
if ( !sol[0] ) return;
freopen(_fout, "w", stdout);
for (printf("%d\n", sol[0]),i=1; i<=sol[0]; i++)
printf("%d\n", sol[i]);
exit(0);
}
int i, j, rez, x, y, t;
x = part[ cond[num][0] ], y = part[ cond[num][1] ], t = cond[num][2];
for ( i=( x==-1?0:x ); i<=( x==-1?1:x ); i++)
for ( j=( y==-1?0:y ); j<=( y==-1?1:y ); j++)
if ( booleq(i, j, t) )
{
part[ cond[num][0] ] = i, part[ cond[num][1] ] = j;
constraint(num+1);
}
part[ cond[num][0] ] = x,
part[ cond[num][1] ] = y;
}
void solve()
{
memset(part, 0xff, sizeof(part));
constraint(1);
}
int main()
{
readf();
solve();
return 0;
}