Pagini recente » Cod sursa (job #110029) | Cod sursa (job #164720) | Cod sursa (job #18274) | Cod sursa (job #2985071) | Cod sursa (job #2984732)
//Ilie Dumitru
#include<cstdio>
#include<vector>
#include<algorithm>
const int NMAX=128;
std::vector<int> G[NMAX<<1], toAdd[2], sol;
unsigned long long int visited[(NMAX>>6)+3];
int N, M;
void dfs(int node)
{
if(!(visited[(node%N)>>6]&(1<<((node%N)&63))))
{
toAdd[node/N].push_back(node%N);
visited[(node%N)>>6]|=1<<((node%N)&63);
int i;
for(i=0;i<(int)G[node].size();++i)
dfs(G[node][i]);
}
}
int main()
{
FILE* f=fopen("party.in", "r"), *g=fopen("party.out", "w");
int i, a, b, c;
fscanf(f, "%d%d", &N, &M);
for(i=0;i<M;++i)
{
fscanf(f, "%d%d%d", &a, &b, &c);
--a;
--b;
switch(c)
{
case 0:
G[a].push_back(b+N);
G[b].push_back(a+N);
break;
case 1:
G[a].push_back(b);
G[b+N].push_back(a+N);
break;
case 2:
G[b].push_back(a);
G[a+N].push_back(b+N);
break;
case 3:
G[a+N].push_back(b);
G[b+N].push_back(a);
break;
}
}
for(i=0;i<N;++i)
dfs(i+N);
std::sort(toAdd[1].begin(), toAdd[1].end());
fprintf(g, "%d\n", (int)toAdd[1].size());
for(i=0;i<(int)toAdd[1].size();++i)
fprintf(g, "%d\n", toAdd[1][i]+1);
fclose(f);
fclose(g);
return 0;
}