Pagini recente » Cod sursa (job #1681372) | Cod sursa (job #2526040) | Cod sursa (job #3293676) | Cod sursa (job #2693182) | Cod sursa (job #2693176)
#include<bits/stdc++.h>
using namespace std;
#define INF 10000
#define N 1001
#define M 10001
#define fi first
#define se second
int path[N];
int adj[N][N];
int n,m;
vector<pair<int,int> > v[N];
pair<int, int> muchii[M];
bool viz[N], viz2[N];
set<int> ans;
bool bfs(){
queue<int> q;
for(int i = 2;i<=n;i++)
path[i] = 0;
path[1] = -1;
q.push(1);
while(!q.empty()){
int curr = q.front();
q.pop();
for(auto next: v[curr]){
if(!path[next.fi] && adj[curr][next.fi]){
path[next.fi] = curr;
q.push(next.fi);
}
}
}
return path[n];
}
void maxflow(){
while(bfs()){
for(auto pred : v[n]){
int curr = n;
path[n] = pred.fi;
if(path[pred.fi] > 0){
int flow = INF;
while(path[curr] != -1){
flow = min(flow, adj[path[curr]][curr]);
curr = path[curr];
}
curr = n;
while(path[curr] != -1){
adj[path[curr]][curr] -= flow;
adj[curr][path[curr]] += flow;
curr = path[curr];
}
}
}
}
}
void dfs1(int x){
viz[x] = 1;
for(auto next: v[x]){
if(!viz[next.fi] && adj[x][next.fi]){
dfs1(next.fi);
}
}
}
void dfs2(int x){
viz2[x] = 1;
for(auto next: v[x]){
if(!viz[next.fi])
ans.insert(next.se);
else if(!viz2[next.fi])
dfs2(next.fi);
}
}
int main(){
ifstream cin("critice.in");
ofstream cout("critice.out");
cin>>n>>m;
for(int i = 1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
v[a].push_back({b, i});
v[b].push_back({a, i});
adj[a][b] = c;
adj[b][a] = c;
muchii[i] = {a,b};
}
maxflow();
dfs1(1);
dfs2(1);
cout<<ans.size()<<'\n';
for(auto i: ans){
cout<<i<<'\n';
}
return 0;
}