Pagini recente » Cod sursa (job #1435802) | Cod sursa (job #1129528) | Cod sursa (job #226468) | Cod sursa (job #1764233) | Cod sursa (job #2277281)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#define pb push_back
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m,i,j,nr,nrz,x,nv,ns,vmx=100000000;
int c[1024][1024],d[1024],t[1024];
vector<int> ad[1024];
deque<int> q;
pair<int,int> v[10005],s[1024];
int make_bf(bool ok)
{
for(int i=1;i<=n;i++) d[i]=0;
while(!q.empty()) q.pop_front();
if(ok) d[n]=1, t[n]=n, q.pb(n);
d[1]=1; t[1]=0; q.pb(1);
while(!q.empty())
{
x=q.front(), q.pop_front();
if(x==n&&!ok) return d[n];
for(int i:ad[x])
if(d[i]==0 && c[x][i]>0)
d[i]=d[x]+1, t[i]=(ok)?t[x]:x, q.pb(i);
}
return d[n];
}
void update()
{
int x=t[n],st=n,mn=vmx;
while(x)
{
mn=min(mn, c[x][st]);
x=t[x]; st=t[st];
}
if(mn==0) return;
x=t[n]; st=n;
while(x)
{
c[x][st]-=mn;
c[st][x]+=mn;
x=t[x]; st=t[st];
}
}
int main() {
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>j>>x>>nr;
c[j][x]=c[x][j]=nr;
ad[j].pb(x);
ad[x].pb(j);
v[i]={j,x};
}
while(make_bf(0))
{
ns=0;
for(int j:ad[n])
if(d[j]>0 && c[j][n]>0) s[++ns]={d[j],j};
sort(s+1,s+ns+1);
for(i=1;i<=ns;i++)
t[n]=s[i].second, update();
}
nr=make_bf(1);
for(i=1;i<=m;i++)
if(d[v[i].first]&&d[v[i].second]&&t[v[i].first]!=t[v[i].second])
v[++nrz].first=i;
fout<<nrz<<"\n";
for(i=1;i<=nrz;i++)
fout<<v[i].first<<"\n";
}