Pagini recente » Cod sursa (job #468388) | Cod sursa (job #164758) | Cod sursa (job #468394) | Cod sursa (job #468500) | Cod sursa (job #3138877)
//Ilie Dumitru
#include<cstdio>
#include<vector>
#include<bitset>
const int NMAX=256;
int N, N2;
std::vector<int> G[NMAX];
std::bitset<NMAX> set, col;
int updated[NMAX], cntU;
inline int sim(int n) {return (N+n)%N2;}
bool dfs(int node)
{
if(set[node%N])
{
if(col[node%N]!=node/N)
return 1;
return 0;
}
set[node%N]=1;
col[node%N]=node/N;
updated[cntU++]=node%N;
int i;
for(i=0;i<(int)G[node].size();++i)
if(dfs(G[node][i]))
return 1;
return 0;
}
void reset()
{
int i;
for(i=0;i<cntU;++i)
set[updated[i]]=0;
}
int main()
{
FILE* f=fopen("party.in", "r"), *g=fopen("party.out", "w");
//FILE* f=stdin, *g=stdout;
int i, a, b, c, _, ina, inb, oua, oub;
fscanf(f, "%d%d", &N, &_);
N2=N<<1;
for(i=0;i<_;++i)
{
fscanf(f, "%d%d%d", &a, &b, &c);
--a;
--b;
ina=a+(c>1)*N;
inb=b+(c&1)*N;
oua=a+(c<2)*N;
oub=b+(!(c&1))*N;
G[ina].push_back(oub);
G[inb].push_back(oua);
}
for(i=0;i<N;++i, cntU=0)
if(dfs(i+N))
{
reset();
dfs(i);
}
for(i=a=0;i<N;++i)
a+=col[i];
fprintf(g, "%d\n", a);
for(i=0;i<N;++i)
if(col[i])
fprintf(g, "%d\n", i+1);
fclose(f);
fclose(g);
return 0;
}