Cod sursa(job #186358)

Utilizator luk17Luca Bogdan luk17 Data 27 aprilie 2008 19:26:11
Problema Critice Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<stdio.h>
long n,m,a[101][101],F[101],U[101],Q[101],pr,ul,viz[101][101],sol[101];

long min(long a,long b)
{
if(a>b)
    return b;
else
    return a;
}
int BFS()
{
long i,k;
for(i=1;i<=n;i++)
    {
    F[i]=0;
    U[i]=-1;
    }
F[1]=2000000000;
pr=ul=1;
Q[1]=1;
while(pr<=ul)
    {
    k=Q[pr++];
    for(i=1;i<=n;i++)
       if(a[k][i]&&F[i]==0)
           {
           Q[++ul]=i;
           F[i]=min(F[k],a[k][i]);
           U[i]=k;
           }
    }
if(F[n]==0)
    return 0;
for(i=n;i!=1;i=U[i])
  {
    a[U[i]][i]-=F[n];
    a[i][U[i]]+=F[n];
  }
return 1;
}

int main()
{
long i,x,y,c;
freopen("critice.in","r",stdin);
freopen("critice.out","w",stdout);
scanf("%ld%ld",&n,&m);
    for(i=1;i<=m;i++)
        {
        scanf("%ld%ld%ld",&x,&y,&c);
        if(x<y)
            {
            a[x][y]=c;
            viz[x][y]=i;
            }
        else
            {
            a[y][x]=c;
            viz[y][x]=i;
            }
        }
while(BFS());
int nr=0;

for(i=1;i<=n;i++)
   for(int j=1;j<=n;j++)
       if(viz[i][j]==1&&(a[i][j]=x=0||a[j][i]==0))
         {
         sol[viz[i][j]]=1;
         nr++;
         }

printf("%ld\n",nr);
for(i=1;i<=n;i++)
   if(sol[i]==1)
      printf("%ld\n",i);

return 0;
}