Pagini recente » Cod sursa (job #255786) | Cod sursa (job #758080) | Cod sursa (job #71052) | Cod sursa (job #1386588) | Cod sursa (job #161847)
Cod sursa(job #161847)
using namespace std;
#include<cstdio>
#include<cstdlib>
#include<vector>
#define Nm 256
#define Not(x) ((x)>n?(x)-n:(x)+n)
char Viz[Nm];
int St[Nm],A[Nm],n,k;
vector<int> G[Nm],Gt[Nm];
void read()
{
int m,x,y,z;
freopen("party.in","r",stdin);
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
x+=n*((z&2)!=0); y+=n*(z&1);
G[Not(x)].push_back(y);
Gt[y].push_back(Not(x));
G[Not(y)].push_back(x);
Gt[x].push_back(Not(y));
}
}
void DFS(int x)
{
vector<int>::iterator it;
Viz[x]=1;
for(it=G[x].begin();it!=G[x].end();++it)
if(!Viz[*it])
DFS(*it);
St[++k]=x;
}
void DFST(int x)
{
vector<int>::iterator it;
Viz[x]=1; A[k++]=x;
for(it=Gt[x].begin();it!=Gt[x].end();++it)
if(!Viz[*it])
DFST(*it);
}
void solve()
{
int i,j;
for(i=1;i<=n<<1;++i)
if(!Viz[i])
DFS(i);
memset(Viz,0,Nm*sizeof(char));
for(i=k;i;--i)
if(!Viz[St[i]])
{
k=0;
DFST(St[i]);
for(j=0;j<k;++j)
{
Viz[A[j]]=1;
Viz[Not(A[j])]=2;
}
}
for(k=0,i=1;i<=n;++i)
if(Viz[i]==2)
A[k++]=i;
}
void write()
{
int i;
freopen("party.out","w",stdout);
printf("%d\n",k);
for(i=0;i<k;++i)
printf("%d\n",A[i]);
}
int main()
{
read();
solve();
write();
return 0;
}