Cod sursa(job #166095)

Utilizator stefanrStefan Ruseti stefanr Data 27 martie 2008 13:40:32
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<fstream.h>
ifstream fin("party.in");
ofstream fout("party.out");

short a[101][101],n,m,s[101],nr;

void incearca()
{nr=0;
 short i,j;
 for(i=1;i<=n;i++)
  if(s[i]!=-2) s[i]=0;
 for(i=1;i<=n;i++)
  if(s[i]!=-2)
   {if(s[i]==0)
     {s[i]=1;
      nr++;
     }
    for(j=i+1;j<=n;j++)
     {if(a[i][j]==2)
       if(s[j]<0)
        {s[i]=-2;
         incearca();
         return;
        }
      if(a[i][j]==3)
       {if(s[j]==1)
         {s[i]=-2;
          incearca();
          return;
         }
        if(s[j]==0) s[j]=-1;
       }
      if(a[i][j]==5)
       {if(s[j]<0)
         {s[i]=-2;
          incearca();
          return;
         }
        if(s[j]==0)
         {s[j]=1;
          nr++;
         }
       }
     }
   }
}

int main()
{fin>>n>>m;
int i,j,x,y;
for(i=1;i<=m;i++)
 {fin>>x>>y>>j;
  if(j==0) j=4;
  if(j==1 && (a[x][y]==2 || a[x][y]==5)) a[x][y]=a[y][x]=5;
  else
   if(j==2 && (a[x][y]==1 || a[x][y]==5)) a[x][y]=a[y][x]=5;
   else
    {a[x][y]=j;
     if(j==1) a[y][x]=2;
     if(j==2) a[y][x]=1;
     if(j==3 || j==4) a[y][x]=j;
    }
  }
 incearca();
 fout<<nr<<"\n";
 for(i=1;i<=n;i++)
  if(s[i]>0) fout<<i<<"\n";
 fin.close();
 fout.close();
}