Pagini recente » Cod sursa (job #2901610) | Cod sursa (job #1990893) | Cod sursa (job #621518) | Cod sursa (job #655668) | Cod sursa (job #1078409)
#include <stdio.h>
#include <vector>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define N 100
using namespace std;
vector<int>oo[2*N+1],OO[2*N+1];
vector<int>*o=oo+N,*O=OO+N;
bool C[2*N+1],V[2*N+1];
bool*c=C+N,*v=V+N;
int L[2*N],l,S;
void dfs1(int i){
c[i]=true;
int s=o[i].size();
fr(j,0,s) if(!c[o[i][j]]) dfs1(o[i][j]);
L[--l]=i;
}
void dfs2(int i){
c[i]=false;
v[-i]=true;
if(i<0) ++S;
int s=O[i].size();
fr(j,0,s) if(c[O[i][j]]) dfs2(O[i][j]);
}
int main(){
freopen("party.in","r",stdin);
freopen("party.out","w",stdout);
int n,m,x,y,z;
scanf("%i%i",&n,&m);
fr(i,0,m){
scanf("%i%i%i",&x,&y,&z);
if(z&1) y=-y;
if(z&2) x=-x;
o[-x].push_back(y);
o[-y].push_back(x);
O[y].push_back(-x);
O[x].push_back(-y);
}
l=n<<1;
fr(i,-n,n+1){
if(!i)continue;
if(!c[i])dfs1(i);
}
fr(i,0,n<<1){
if(v[-L[i]]||v[L[i]])continue;
if(c[L[i]])dfs2(L[i]);
}
printf("%i\n",S);
fr(i,1,n+1) if(v[i])printf("%i ",i);
return 0;
}