Pagini recente » Cod sursa (job #1571629) | Cod sursa (job #2335477) | Cod sursa (job #1840240) | Cod sursa (job #19185) | Cod sursa (job #2209051)
#include <fstream>
using namespace std;
ifstream in ("critice.in");
ofstream out ("critice.out");
//vector <int> v[1005];
int n,m,pred[1005],c[1002][1002],f[1002][1002],q[1002],viz[1002],x1[10003],x2[10003];
void reset_viz()
{
for(int i=1;i<=n;++i)
viz[i]=0;
}
void citire ()
{
int i,a,b,cc;
in>>n>>m;
for(i=1;i<=m;++i)
{
in>>a>>b>>cc;
// v[a].push_back(b);
c[a][b]=cc;
c[b][a]=cc;
x1[i]=a;
x2[i]=b;
}
}
bool bfs (int s)
{
int st=0,dr=-1,x,y;
reset_viz();
q[++dr]=s;
while(st<=dr)
{
x=q[st++];
viz[x]=1;
for(y=1;y<=n;++y)
if(!viz[y] && c[x][y]>f[x][y])
{
q[++dr]=y;
pred[y]=x;
if(y==n)
return true;
}
}
return false;
}
int min_drum()
{
int x=n,vmin=99999999;
while(x!=1)
{
vmin=min(vmin,c[pred[x]][x]-f[pred[x]][x]);
x=pred[x];
}
return vmin;
}
void actualizare_drum(int vmin)
{
int x=n;
while(x!=1)
{
f[pred[x]][x]+=vmin;
f[x][pred[x]]-=vmin;
x=pred[x];
}
}
int main()
{
int vmin,i,cnt=0;
citire();
while(bfs(1))
{
vmin=min_drum();
actualizare_drum(vmin);
}
for(i=1;i<=m;++i)
if(f[x1[i]][x2[i]]==c[x1[i]][x2[i]] && bfs(x2[i]) || f[x2[i]][x1[i]]==c[x2[i]][x1[i]] && bfs(x1[i]))
cnt++;
out<<cnt<<'\n';
for(i=1;i<=m;++i)
if(f[x1[i]][x2[i]]==c[x1[i]][x2[i]] && bfs(x2[i]) || f[x2[i]][x1[i]]==c[x2[i]][x1[i]] && bfs(x1[i]))
out<<i<<'\n';
return 0;
}