Pagini recente » Cod sursa (job #2677079) | Cod sursa (job #1996064) | Cod sursa (job #227798) | Cod sursa (job #2080879) | Cod sursa (job #2691856)
#include <bits/stdc++.h>
using namespace std;
ifstream f("critice.in");
ofstream g("critice.out");
int n,m,c[1005][1005],F[1005][1005],t[1005];
vector<int> G[1005],rez;
vector<pair<int,int>> e;
bool bfs(int s, int d)
{
queue<int> q;
for(int i=1; i<=n; i++)
{
t[i]=-1;
}
t[s]=0;
q.push(s);
while(!q.empty())
{
int x = q.front();
q.pop();
for(auto it : G[x])
{
if(t[it]==-1 && c[x][it]>F[x][it])
{
t[it]=x;
if(it==d)
{
return true;
}
q.push(it);
}
}
}
return false;
}
int max_flow(int s, int d)
{
int flux = 0;
while(bfs(s,d))
{
for(auto it : G[d])
{
int nod = it;
int add = c[it][d]-F[it][d];
int dad = t[nod];
while(nod!=s)
{
add = min(add,c[dad][nod]-F[dad][nod]);
nod = dad;
dad = t[nod];
}
flux+=add;
F[it][d]+=add;
F[d][it]-=add;
nod = it;
dad = t[nod];
while(nod!=s)
{
F[dad][nod]+=add;
F[nod][dad]-=add;
nod = dad;
dad = t[nod];
}
}
}
return flux;
}
int main()
{
f>>n>>m;
for(int i=1; i<=m; i++)
{
int x,y,t;
f>>x>>y>>t;
G[x].push_back(y);
G[y].push_back(x);
c[x][y]=t;
c[y][x]=t;
e.push_back({x,y});
}
max_flow(1,n);
int cnt = 0;
for(auto it : e)
{
++cnt;
int x = it.first;
int y = it.second;
if(F[x][y]!=c[x][y])
{
continue;
}
++c[x][y];
if(bfs(1,n))
{
rez.push_back(cnt);
}
--c[x][y];
}
g<<rez.size()<<'\n';
for(auto it : rez)
{
g<<it<<'\n';
}
return 0;
}