Pagini recente » Cod sursa (job #641579) | Cod sursa (job #306836) | Cod sursa (job #1244462) | Cod sursa (job #2173003) | Cod sursa (job #1933091)
#include <bits/stdc++.h>
#define NMAX 1024
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m;
vector<int> g[NMAX];
vector<pair<int,int> > muchii;
queue<int> answer;
int c[NMAX][NMAX],f[NMAX][NMAX];
bitset<NMAX> viz;
int parent[NMAX];
int BF()
{
viz.reset();
queue<int> Q;
Q.push(1);
viz[1] = 1;
for (;Q.size();Q.pop()) {
int nod = Q.front();
if (nod == n) continue;
for(auto q:g[nod]) {
if(c[nod][q]==f[nod][q]||viz[q]) continue;
viz[q]=1;
Q.push(q);
parent[q]=nod;
}
}
return viz[n];
}
int edmondKarp() {
memset(f,0,sizeof(f));
int flow=0,fmin=0;
for (flow = 0; BF();) for(auto q:g[n]) {
if(f[q][n]==c[q][n]||!viz[q]) continue;
parent[n]=q;
fmin=INF;
for(q=n;q!=1;q=parent[q]) {
fmin=min(fmin,c[parent[q]][q]-f[parent[q]][q]);
}
if(fmin==0) continue;
for(q=n;q!=1;q=parent[q]) {
f[parent[q]][q]+=fmin;
f[q][parent[q]]-=fmin;
}
flow+=fmin;
}
return flow;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++) {
int x,y,z;
fin>>x>>y>>z;
c[x][y]=z;
c[y][x]=z;
g[x].push_back(y);
g[y].push_back(x);
muchii.push_back(make_pair(x,y));
}
int fluxInit = edmondKarp();
int muchieC=0;
for(auto q:muchii) {
muchieC++;
int n1=q.first,n2=q.second;
c[n1][n2]++;
c[n2][n1]++;
if(edmondKarp()>fluxInit) answer.push(muchieC);
c[n1][n2]--;
c[n2][n1]--;
}
fout<<answer.size()<<'\n';
for(;answer.size();answer.pop()) fout<<answer.front()<<'\n';
return 0;
}