Pagini recente » Cod sursa (job #2787093) | Cod sursa (job #108899) | Cod sursa (job #15195) | Cod sursa (job #2984726)
//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)
{
toAdd[0].clear();
toAdd[1].clear();
dfs(i+N);
if(toAdd[0].size()>toAdd[1].size())
{
for(a=0;a<(int)toAdd[0].size();++a)
sol.push_back(toAdd[0][a]);
}
else
{
for(a=0;a<(int)toAdd[1].size();++a)
sol.push_back(toAdd[1][a]);
}
}
std::sort(sol.begin(), sol.end());
fprintf(g, "%d\n", (int)sol.size());
for(i=0;i<(int)sol.size();++i)
fprintf(g, "%d\n", sol[i]+1);
fclose(f);
fclose(g);
return 0;
}