Pagini recente » Cod sursa (job #511659) | Cod sursa (job #523132) | Cod sursa (job #216365) | Cod sursa (job #688292) | Cod sursa (job #419559)
Cod sursa(job #419559)
#include <fstream.h>
int n,m,A[1001][1001],C[1001][1001],F[1001][1001],viz[1001],viz_crit[1001],muchii[2][10000];
void citire()
{
ifstream in("critice.in");
in >>n>>m;
int i,x,y,c;
for(i=1;i<=n;i++) A[i][0]=0;
for(i=1;i<=m;i++)
{
in >>x>>y>>c;
muchii[0][i]=x;
muchii[1][i]=y;
A[x][0]++;
A[x][A[x][0]]=y;
A[y][0]++;
A[y][A[y][0]]=x;
F[x][y]=F[y][x]=0;
C[x][y]=C[y][x]=c;
}
in.close();
}
int bf(int S,int D)
{
int q[1001],i,inc=0,sf=-1,tmp;
memset(viz,0,sizeof(viz));
q[++sf]=S;
viz[S]=-1;
while(inc<=sf)
{
tmp=q[inc++];
for(i=1;i<=A[tmp][0];i++)
if(C[tmp][A[tmp][i]]>F[tmp][A[tmp][i]] && !viz[A[tmp][i]])
{
q[++sf]=A[tmp][i],viz[A[tmp][i]]=tmp;
if(A[tmp][i]==D) return 1;
}
}
return 0;
}
void ek()
{
int i,min,flux=0;
while(bf(1,n))
{
//cout <<"bf-ul zburda!\n";
min=C[n][viz[n]]-F[n][viz[n]];
i=viz[n];
while(viz[i]!=-1)
{
if(min>C[i][viz[i]]-F[i][viz[i]]) min=C[i][viz[i]]-F[i][viz[i]];
i=viz[i];
}
i=n;
while(viz[i]!=-1)
{
F[i][viz[i]]+=min;
F[viz[i]][i]+=min;
i=viz[i];
}
flux+=min;
}
//return flux;
}
void bf_critice(int S,int k)
{
int i,q[1001],inc=0,sf=-1,tmp;
viz_crit[S]=k;
q[++sf]=S;
while(inc<=sf)
{
tmp=q[inc++];
for(i=1;i<=A[tmp][0];i++)
if(!viz_crit[A[tmp][i]] && C[tmp][A[tmp][i]]>F[tmp][A[tmp][i]])
{
viz_crit[A[tmp][i]]=k;
q[++sf]=A[tmp][i];
}
}
}
int main()
{
ofstream out("critice.out");
int i,K=0;
citire();
ek();
memset(viz_crit,0,sizeof(viz_crit));
bf_critice(1,1);
bf_critice(n,2);
for(i=1;i<=m;i++)
if(viz_crit[muchii[0][i]]+viz_crit[muchii[1][i]]==3) K++;
out <<K<<"\n";
for(i=1;i<=m;i++)
if(viz_crit[muchii[0][i]]+viz_crit[muchii[1][i]]==3) out <<i<<"\n";
out.close();
return 0;
}