Cod sursa(job #267237)

Utilizator kenzokSpineanu Paul kenzok Data 26 februarie 2009 22:29:52
Problema Critice Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int T[100],C[100][100],F[100][100],N,M,m[100][2], T2[100], S, D;
int min(int a,int b)
{return (a > b ? b : a);}
int BF(int s,int d)
{int q[100],p,u,nod,i;
memset(T,0,sizeof(T));
for (p=u=0,q[0]=s,T[s]=-1;p<=u;p++)
	{nod=q[p];
        for (i=1;i<=N;i++)
            if (!T[i]&&C[nod][i]>F[nod][i])
            		{q[++u]=i;
                	 T[i]=nod;
                	 if (i==d) return 1;
           		 }
    	 }
return 0;
}
int main()
{int i,a,b,c,flux,r,num;
fstream f("critice.in",ios::in);
fstream g("critice.out",ios::out);
f>>N>>M;
for (i=1;i<=M;i++)
    	{f>>a>>b>>c;
         m[i][0] = a;
         m[i][1] = b;
         C[a][b] = C[b][a] = c;
    	 }
S=1;
f.close();
D=N;
for (flux=0;BF(S,D);flux=flux+r)
	{for (r=2000000000,i=D;i!=S;i=T[i])
            r=min(r,C[T[i]][i]-F[T[i]][i]);
         for (i=D;i!=S;i=T[i])
            F[T[i]][i]+=r,F[i][T[i]]-=r;
}
int p,u,q[100],nod;
memset(T,0,sizeof(T));
for (p=u=0,q[0]=1,T[1]=-1;p<=u;p++)
    	{nod=q[p];
	 for (i=1;i<=N;i++)
            if (!T[i]&&C[nod][i]!=F[nod][i])
            	{q[++u] = i;
		 T[i] = nod;}
         }
memset(T2,0,sizeof(T2));
for (p=u=0,q[0]=N,T2[N]=-1;p<=u;p++)
    {nod=q[p];
     for (i=1;i<=N;i++)
            if (!T2[i]&&C[i][nod]!=F[i][nod])
            {q[++u]=i;
             T2[i]=nod;}
    }
for (i=1,num=0;i<=M;i++)
        if (((T[m[i][0]]&&T2[m[i][1]])||(T[m[i][1]]&&T2[m[i][0]]))&&C[m[i][0]][m[i][1]]==abs(F[m[i][0]][m[i][1]]))
            			num ++;
g<<num;
for (i = 1; i <= M; i++)
        if (((T[m[i][0]]&&T2[m[i][1]])||(T[m[i][1]]&&T2[m[i][0]]))&&C[m[i][0]][m[i][1]]==abs(F[m[i][0]][m[i][1]]))
	   			g<<i;
return 0;
g.close();
}