Pagini recente » Cod sursa (job #1781579) | Cod sursa (job #2547618) | Cod sursa (job #2125302) | Cod sursa (job #646508) | Cod sursa (job #1945780)
#include <fstream>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
#define INF 1000000000
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m,j,z,x,y,c,q,t[1005],fmn,ct,flow,s[5005],p[1005][1005];
int d[1005][1005],f[1005][1005],dmax[1005];
vector <int> v[1005];
bool viz[1005];
queue <int>C;
void BFS()
{int i;
memset(viz,0,sizeof(viz));
C.push(1);
viz[1]=1;
while(!C.empty())
{c=C.front();
C.pop();
if(c==n)continue;
for(i=0;i<v[c].size();i++)
{q=v[c][i];
if(viz[q]==0&&d[c][q]!=f[c][q])
{viz[q]=1;
C.push(q);
t[q]=c;
}
}
}
}
int main()
{int i;
fin>>n>>m;
for(i=1;i<=m;i++)
{fin>>x>>y>>z;
v[x].push_back(y);
v[y].push_back(x);
d[x][y]=z;
d[y][x]=z;
dmax[x]+=z;
dmax[y]+=z;
p[x][y]=i;
p[y][x]=i;
}
BFS();
while(viz[n]==1)
{for(i=0;i<v[n].size();i++)
{fmn=INF;
if(viz[v[n][i]]==1&&d[v[n][i]][n]!=f[v[n][i]][n])
{t[n]=v[n][i];
q=n;
while(q!=1)
{fmn=min(fmn,d[t[q]][q]-f[t[q]][q]);
q=t[q];
}
q=n;
while(q!=1)
{f[t[q]][q]+=fmn;
f[q][t[q]]-=fmn;
q=t[q];
}
}
if(fmn!=INF)flow+=fmn;
}
BFS();
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{if(f[i][j]==d[i][j]&&d[i][j]!=0&&dmax[j]-f[i][j]>f[i][j]){ct++;s[ct]=p[i][j];}
}
}
fout<<ct<<"\n";
sort(s+1,s+ct+1);
for(i=1;i<=ct;i++)
{fout<<s[i]<<"\n";
}
}