Pagini recente » Cod sursa (job #1740152) | Cod sursa (job #2065244) | Cod sursa (job #2030223) | Cod sursa (job #596556) | Cod sursa (job #2277165)
#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,vmx=1<<20;
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]=1, q.pb(n);
d[1]=1;
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])
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};
}
int ns;
while(make_bf(0))
{
ns=0;
for(int j:ad[n])
if(d[j] && c[j][n]) 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";
}