Pagini recente » Cod sursa (job #833688) | Cod sursa (job #3267809) | Cod sursa (job #2470586) | Cod sursa (job #3144745) | Cod sursa (job #467246)
Cod sursa(job #467246)
#include <cstdio>
#include <cstdlib>
#include <bitset>
#include <vector>
using namespace std;
#define N 100010
#define pb push_back
int n;
char cul[N];
vector< int > a[N][3];
char unde[N];
bitset< 35 > e[3][35];
void scrie(int conf)
{
--n;
for(int i=0; i<n; ++i)
{
if((conf&(1<<i))!=0)
printf("1 ");
else
printf("0 ");
}
if((conf&(1<<n))!=0)
printf("1\n");
else
printf("0\n");
exit(0);
}
void back(int nod,int conf)
{
if(nod==n)
scrie(conf);
bool ok=true;
for(int i=0; i<nod && ok; ++i)
{
if((conf&(1<<i))!=0)
{
if(e[2][nod][i]==1)
ok=false;
}
else
{
if(e[0][nod][i]==1)
ok=false;
}
}
if(ok && e[0][nod][nod]==1)
ok=false;
if(ok)
back(nod+1,conf);
ok=true;
for(int i=0; i<nod && ok; ++i)
{
if((conf&(1<<i))!=0)
{
if(e[1][nod][i]==1)
ok=false;
}
else
{
if(e[2][nod][i]==1)
ok=false;
}
}
if(ok && e[1][nod][nod]==1)
ok=false;
if(ok)
back(nod+1,(conf|(1<<nod)));
}
inline void citire()
{
int m;
scanf("%d%d",&n,&m);
int x,y,z;
if(n<32)
{
for(int i=0; i<m; ++i)
{
scanf("%d%d%d",&x,&y,&z);
--x;
--y;
e[z][x][y]=1;
e[z][y][x]=1;
}
back(0,0);
exit(0);
}
//for(int i=0; i<m; ++i)
//{
// scanf("%d%d%d",&x,&y,&z);
}
int main()
{
freopen("andrei.in","r",stdin);
freopen("andrei.out","w",stdout);
citire();
return 0;
}