Pagini recente » Cod sursa (job #570242) | Cod sursa (job #3272020) | Cod sursa (job #2623236) | Cod sursa (job #1506275) | Cod sursa (job #209187)
Cod sursa(job #209187)
#include <stdio.h>
FILE *fin,*fout;
int i,j,m,n,k,ok,cati,x,y,tip;
int obligat[101][2];
int intrus[101][2];
int trebuie[101][101];
int nro,nri;
int luat[100];
void incearca(int i){
int j;
luat[i]=1;
for(j=1;j<=trebuie[i][0];j++)
if(!luat[trebuie[i][j]]) 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){
nro++;
obligat[nro][0]=x;obligat[nro][1]=y;
}
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{
nri++;
intrus[nri][0]=x;intrus[nri][1]=y;
}
}
ok=0;
for(i=1;i<=n, !ok;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] && ok){
cati++;
for(k=1;k<=nro;k++)
if((luat[obligat[k][0]]||luat[obligat[k][1]])==0){
ok=0; break;}
for(k=1;k<=nri;k++)
if((luat[intrus[k][0]]&&luat[intrus[k][1]])==1){
ok=0; break;}
}
if(ok==1){
fprintf(fout,"%d\n",cati);
for(j=1;j<=n;j++)
if(luat[j]) fprintf(fout,"%d\n",j);
}
}
fclose(fin); fclose(fout);
return 0;
}