Pagini recente » Cod sursa (job #2913459) | Cod sursa (job #1572677) | Cod sursa (job #170161) | Cod sursa (job #2622039) | Cod sursa (job #641887)
Cod sursa(job #641887)
#include<stdio.h>
#include<vector.h>
#define pb push_back
#define N 201
int p[N],n,m,i,a[N],b[N],j,w[N],c[N],nr,k,z,d[N];
vector<int> f[N],g[N];
void dfs(int x)
{int i;
c[x]=1;
for(i=0;i<f[x].size();i++)
if(!c[f[x][i]])
dfs(f[x][i]);
w[++nr]=x;}
void dfst(int x)
{int i;
c[x]=0;
if(p[x]==2)
{p[x]=0;
if(x>n)
p[x-n]=1;
else
p[x+n]=1;}
for(i=0;i<g[x].size();i++)
if(c[g[x][i]])
dfst(g[x][i]);}
int main()
{FILE *f1=fopen("party.in","r"),*f2=fopen("party.out","w");
fscanf(f1,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{fscanf(f1,"%d%d%d",&a[i],&b[i],&z);
if(!z)
f[a[i]].pb(b[i]),g[b[i]].pb(a[i]);
else
if(z==1)
f[a[i]].pb(b[i]+n),g[b[i]+n].pb(a[i]);
else
if(z==2)
f[a[i]+n].pb(b[i]),g[b[i]].pb(a[i]+n);
else
f[a[i]+n].pb(b[i]+n),g[b[i]+n].pb(a[i]+n);}
for(j=1;j<=2*n;j++)
{p[j]=2;
if(!c[j])
dfs(j);}
for(i=nr;i;i--)
if(c[i])
dfst(w[i]);
for(i=1;i<=m;i++)
if(!z&&!p[a[i]]&&!p[b[i]])
p[b[i]]=1;
else
if(z==1&&!p[a[i]]&&p[b[i]])
p[b[i]]=0;
else
if(z==2&&p[a[i]]&&!p[b[i]])
p[b[i]]=1;
else
if(z==3&&p[a[i]]&&p[b[i]])
p[b[i]]=0;
for(i=1;i<=m;i++)
if(!z&&!p[a[i]]&&!p[b[i]])
p[a[i]]=1;
else
if(z==1&&!p[a[i]]&&p[b[i]])
p[a[i]]=1;
else
if(z==2&&p[a[i]]&&!p[b[i]])
p[a[i]]=0;
else
if(z==3&&p[a[i]]&&p[b[i]])
p[a[i]]=0;
for(i=1,k=0;i<=n;i++)
if(p[i]==1)
d[++k]=i;
fprintf(f2,"%d\n",k);
for(i=1;i<=k;i++)
fprintf(f2,"%d\n",d[i]);
return 0;}