Pagini recente » Cod sursa (job #405975) | Cod sursa (job #1821896) | Cod sursa (job #1356439) | Cod sursa (job #1827775) | Cod sursa (job #1132043)
#include<cstdio>
#include<vector>
using namespace std;
typedef pair<int,int> PII;
const int NMAX = 100+5;
const int MMAX = 1000+5;
int N,M;
int Sol[NMAX];
int Viz[NMAX];
vector<PII> V[NMAX];
int Valoare(int x,int y,int z)
{
if(Sol[x]==1 && z<2) return 2;
if(Sol[x]==1 && z==2) return 1;
if(Sol[x]==1 && z==3) return 0;
if(Sol[x]==0 && z==0) return 1;
if(Sol[x]==0 && z==1) return 0;
if(Sol[x]==0 && z>1) return 2;
}
int Fixeaza(int x)
{
int y,z,v;
vector<PII>::iterator it;
for(it=V[x].begin(); it!=V[x].end(); it++)
{
y=it->first;
z=it->second;
v=Valoare(x,y,z);
if(v==2) continue;
if(Viz[y] && v!=Sol[y]) break;
if(!Viz[y])
{
Sol[y]=Valoare(x,y,z);
Viz[y]=Viz[x];
Fixeaza(y);
}
}
return it==V[x].end();
}
int main()
{
int i,j,x,y,z,ans=0;
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
scanf("%d%d",&N,&M);
for(i=1; i<=M; i++)
{
scanf("%d%d%d",&x,&y,&z);
V[x].push_back(make_pair(y,z));
V[y].push_back(make_pair(x,z));
}
for(i=1; i<=N; i++)
{
if(Viz[i]) continue;
Sol[i]=1;
Viz[i]=i;
if(Fixeaza(i)) continue;
for(j=1; j<=N; j++)
if(Viz[j]==i) Viz[j]=0;
Sol[i]=0;
Viz[i]=i;
if(Fixeaza(i)) continue;
}
for(i=1; i<=N; i++)
ans+=Sol[i];
printf("%d\n",ans);
for(i=1; i<=N; i++)
if(Sol[i]) printf("%d\n",i);
return 0;
}