Pagini recente » Cod sursa (job #1515447) | Cod sursa (job #581941) | Cod sursa (job #1629958) | Cod sursa (job #2488782) | Cod sursa (job #2689995)
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define NM 1005
using namespace std;
ifstream fin ("critice.in");
ofstream fout ("critice.out");
vector<int> v[NM];
int n, m, f[NM][NM], c[NM][NM];
int t[NM];
int muchii[NM][NM];
void read();
bool bfs()
{
for(int i=1; i<=n; i++)
t[i] = 0;
queue<int> q;
q.push(1);
t[1] = 1;
while(!q.empty())
{
int nod = q.front();
q.pop();
for(auto it:v[nod])
if(!t[it] and c[nod][it] - f[nod][it] > 0)
{
t[it] = nod;
if(it!=n)
q.push(it);
}
}
if(t[n])
return 1;
return 0;
}
int flux()
{
int flow = 0;
while(bfs())
{
for(auto it:v[n])
if(t[it] and c[it][n] - f[it][n] > 0)
{
int flow_cur = INF;
t[n] = it;
for(int nod = n; nod!=1; nod = t[nod])
flow_cur = min(flow_cur, c[t[nod]][nod] - f[t[nod]][nod]);
if(flow_cur > 0)
for(int nod = n; nod!=1; nod = t[nod])
f[t[nod]][nod]+=flow_cur, f[nod][t[nod]]-=flow_cur;
flow+=flow_cur;
}
}
return flow;
}
int main()
{
read();
flux();
set<int> rez;
bfs();
for(int i=1; i<=n; i++)
if(t[i])
{
for(auto it:v[i])
if(!t[it])
rez.insert(muchii[i][it]);
}
fout << rez.size() << '\n';
for(auto it:rez)
fout << it << '\n';
return 0;
}
void read()
{
fin >> n >> m;
for(int i=1; i<=m; i++)
{
int x, y, cap;
fin >> x >> y >> cap;
muchii[x][y] = muchii[y][x] = i;
v[x].push_back(y);
v[y].push_back(x);
c[x][y] = cap;
}
}