Pagini recente » Cod sursa (job #647078) | Cod sursa (job #2192464) | Cod sursa (job #1414710) | Cod sursa (job #206497) | Cod sursa (job #1388389)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
FILE *f=fopen("party.in","r"),*g=fopen("party.out","w");
vector <int> v[205],vt[205],gc[205];
int n,m,add=4,k,nr,use[205],a[205],c[205],del[205],val[205],sol;
int neg(int x)
{ if (x>n) return x-add;
return x+add;
}
void DFS1(int x)
{ int i;
use[x]=1;
for(i=0;i<v[x].size();i++)
if (!use[v[x][i]]) DFS1(v[x][i]);
k++; a[k]=x;
}
void DFS2(int x)
{ int i;
c[x]=nr;
gc[nr].push_back(x);
// cout<<x<<" "<<nr<<"\n";
for(i=0;i<vt[x].size();i++)
if (!c[vt[x][i]]) DFS2(vt[x][i]);
}
int main()
{ int i,j,t,x,y;
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=m;i++)
{ fscanf(f,"%d %d %d",&t,&x,&y);
if (t==1) y=neg(y);
if (t==2) x=neg(x);
if (t==3) {x=neg(x); y=neg(y);}
v[neg(x)].push_back(y);
vt[y].push_back(neg(x));
v[neg(y)].push_back(x);
vt[x].push_back(neg(y));
}
for(i=1;i<=n+add;i++)
if (!use[i]) DFS1(i);
// for(i=1;i<=k;i++)
// cout<<a[i]<<" ";
for(i=k;i>=1;i--)
if (!c[a[i]]) { nr++; DFS2(a[i]);}
for(i=nr;i>=1;i--)
{
if (del[i]) continue;
for(j=0;j<gc[i].size();j++)
{ if (gc[i][j]<=n) sol++;
val[gc[i][j]]=1;
del[c[gc[i][j]]]=1;
}
}
fprintf(g,"%d\n",sol);
for(i=1;i<=n;i++)
if (val[i]) fprintf(g,"%d\n",i);
return 0;
}