Pagini recente » Cod sursa (job #1593289) | Cod sursa (job #2600754) | Cod sursa (job #784567) | Cod sursa (job #1276166) | Cod sursa (job #1208183)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin ("critice.in");
ofstream fout ("critice.out");
vector <int> l[1010];
int t[1010],F[1010],fn[1010],f[1010][1010],c[1010][1010],r[10010],q[1010];
int n,m,i,C,j,k,p,u,minim,x,y;
struct data {
int x;
int y;
}v[10010];
int bfs() {
memset(t,0,sizeof(t));
memset(F,0,sizeof(F));
t[1]=-1;
F[1]=1;
p=u=q[1]=1;
while (p<=u) {
x=q[p];
for (int i=0;i<l[x].size();i++) {
y=l[x][i];
if (t[y]==0 && c[x][y]>f[x][y]) {
q[++u]=y;
t[y]=x;
F[y]=1;
}
}
p++;
}
return t[n];
}
int bfs1() {
memset(t,0,sizeof(t));
fn[n]=1;
t[n]=-1;
p=u=1;
q[1]=n;
while (p<=u) {
x=q[p];
for (int i=0;i<l[x].size();i++) {
y=l[x][i];
if (t[y]==0 && c[x][y]>f[x][y]*(-1)) {
q[++u]=y;
t[y]=x;
fn[y]=1;
}
}
p++;
}
return t[n];
}
int main () {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>v[i].x>>v[i].y>>C;
l[v[i].x].push_back(v[i].y);
l[v[i].y].push_back(v[i].x);
c[v[i].x][v[i].y]=C;
c[v[i].y][v[i].x]=C;
}
while (bfs()) {
for (i=0;i<l[n].size();i++) {
x=l[n][i];
if (t[x]!=0 && c[x][n]>f[x][n]){
minim=c[x][n]-f[x][n];
while (t[x]!=-1){
if (minim>c[t[x]][x]-f[t[x]][x])
minim=c[t[x]][x]-f[t[x]][x];
x=t[x];
}
x=l[n][i];
f[x][n]+=minim;
f[n][x]-=minim;
while (t[x]!=-1){
f[t[x]][x]+=minim;
f[x][t[x]]-=minim;
x=t[x];
}
}
}
}
bfs();
bfs1();
for (i=1;i<=m;i++)
if ((F[v[i].x]&&fn[v[i].y])||(fn[v[i].x]&&F[v[i].y]))
r[++k]=i;
fout<<k<<"\n";
for (i=1;i<=k;i++)
fout<<r[i]<<"\n";
return 0;
}