Pagini recente » Cod sursa (job #3165540) | Cod sursa (job #753684) | Cod sursa (job #3281010) | Cod sursa (job #2602469) | Cod sursa (job #209211)
Cod sursa(job #209211)
#include <stdio.h>
FILE *fin,*fout;
int i,j,m,n,k,ok,cati,x,y,tip;
int trebuie[1001][1001],a[1001][1001],b[1001][1001];
int nro,nri;
int luat[1001];
void incearca(int i){
int j;
if(luat[i]==-1) ok=0;
else{
luat[i]=1;
for(j=1;j<=trebuie[i][0];j++)
if(luat[trebuie[i][j]]<=0) incearca(trebuie[i][j]);
}
}
int main(){
fin=fopen("party.in","r");
fout=fopen("party.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++){
fscanf(fin,"%d%d%d",&x,&y,&tip);
if(tip==0){
a[x][0]++; a[x][a[x][0]]=y;
a[y][0]++; a[y][a[y][0]]=x;
}
else
if(tip==1){
trebuie[y][0]++;
trebuie[y][trebuie[y][0]]=x;
}
else
if(tip==2){
trebuie[x][0]++;
trebuie[x][trebuie[x][0]]=y;
}
else{
b[x][0]++; b[x][b[x][0]]=y;
b[y][0]++; b[y][b[y][0]]=x;
}
}
ok=0;
for(i=1;i<=n, !ok;i++)
if(!luat[i]){
for(j=1;j<=n;j++) luat[j]=0;
ok=1; cati=0;
incearca(i);
for(j=1;j<=n;j++)
if(luat[j]<=0){
for(k=1;k<=a[j][0];k++)
if(luat[a[j][k]]==-1) ok=0;
else {luat[a[j][k]]=1;incearca(a[j][k]);}
}else
for(k=1;k<=b[j][0];k++)
if(luat[b[j][k]]==1) ok=0;
else luat[b[j][k]]=-1;
for(j=1;j<=n;j++) if(luat[j]==1) cati++;
if(ok==1){
fprintf(fout,"%d\n",cati);
for(j=1;j<=n;j++)
if(luat[j]==1) fprintf(fout,"%d\n",j);
}
}
fclose(fin); fclose(fout);
return 0;
}