Pagini recente » Cod sursa (job #522334) | Cod sursa (job #2901550) | Cod sursa (job #2097770) | Cod sursa (job #349315) | Cod sursa (job #1941968)
#include <fstream>
#include <queue>
#include <algorithm>
#define inf 1000000000
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int d[1001][1001],t[1001],m,n,ac[1001][1001],muc[10005],ct,viz1[10005],md;
bool viz[1001];
queue <int> C;
void BFS()
{
for(int i=1;i<=n;++i) viz[i]=0;
C.push(1);
int i,v; viz[1]=1;
while(!C.empty())
{v=C.front();
C.pop();
for(i=1;i<=n;++i)
if(d[v][i]>0 && viz[i]==0 && ac[v][i]>0)
{ t[i]=v;
viz[i]=1;
if(i!=n) C.push(i);
}
}
}
void Bf()
{ for(int i=1;i<=n;++i) viz[i]=0;
C.push(1);
int i,v;
while(!C.empty())
{v=C.front();
C.pop();
for(i=1;i<=n;++i)
if(d[v][i]>0 && viz[i]==0)
{ viz[i]=1;
if(i!=n) C.push(i); //fout<<i<<"\n";
}
else if(!md)
{
if(d[v][i]==0 && ac[v][i]>0 && viz1[ac[v][i]]==0) viz1[ac[v][i]]=1;
}
else if(d[v][i]==0 && ac[v][i]>0 && viz1[ac[v][i]]==1) muc[++ct]=ac[v][i];
}
}
int main()
{
fin>>n>>m;
int i,x,y,c,fl;
for(i=1;i<=m;++i)
{fin>>x>>y>>c;
d[x][y]=d[y][x]=c;
ac[x][y]=ac[y][x]=i;
}
BFS();
while(viz[n])
{ fl=inf;
for(i=1;i<=n;++i)
if(d[i][n]>0)
{
x=i; fl=d[i][n];
while(x!=1)
fl=min(fl,d[t[x]][x]),x=t[x];
d[i][n]-=fl;
d[n][i]+=fl;
x=i;
while(x!=1)
{ d[t[x]][x]-=fl;
d[x][t[x]]+=fl;
x=t[x];
}
}
BFS();
}
Bf();
md=1;
Bf();
fout<<ct<<"\n";
sort(muc+1,muc+ct+1);
for(i=1;i<=ct;++i)
fout<<muc[i]<<"\n";
return 0;
}