Pagini recente » Cod sursa (job #1180104) | Cod sursa (job #2139593) | Cod sursa (job #526423) | Cod sursa (job #217785) | Cod sursa (job #1932762)
#include <bits/stdc++.h>
#define NMAX 1024
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];
int parent[NMAX];
bool bfs() {
queue<int> Q;
bitset<NMAX> vis;
Q.push(1);
vis[1]=1;
for(;Q.size();Q.pop()) {
int aux=Q.front();
for(auto q:g[aux]) {
if(vis[q]||(f[aux][q]==c[aux][q])) continue;
Q.push(q);
vis[q]=1;
parent[q]=aux;
if(q==n) return 1;
}
}
return 0;
}
int edmondKarp() {
memset(f,0,sizeof(f));
int flux=0,fluxMin=0;
for(;bfs();flux+=fluxMin) {
fluxMin=0x3f3f3f3f;
for(int nod=n;nod!=1;nod=parent[nod]) {
fluxMin=min(fluxMin,c[parent[nod]][nod]-f[parent[nod]][nod]);
}
for(int nod=n;nod!=1;nod=parent[nod]) {
f[parent[nod]][nod]+=fluxMin;
f[nod][parent[nod]]-=fluxMin;
}
}
return flux;
}
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;
}