Pagini recente » Cod sursa (job #1561103) | Cod sursa (job #2666334) | Cod sursa (job #1368725) | Cod sursa (job #505301) | Cod sursa (job #2807228)
#include <bits/stdc++.h>
using namespace std;
ifstream in("critice.in");
ofstream out("critice.out");
int n,m,x[10010],y[10010],c[1010][1010],f[1010][1010],z,ant[1010],r[10010];
vector<vector<int>>a;
bool v[1010];
bool drum()
{
for(int i=2;i<=n;++i)
v[i]=false;
v[1]=true;
queue<int>q;
q.push(1);
while(!q.empty())
{
int x=q.front();
q.pop();
if(x==n)
continue;
for(auto t:a[x])
{
if(v[t]==true||c[x][t]==f[x][t])
continue;
q.push(t);
ant[t]=x;
v[t]=true;
}
}
return v[n];
}
void umplere()
{
int fmin;
while(drum())
{
for(auto x:a[n])
{
ant[n]=x;
if(v[x]==false||f[x][n]==c[x][n])
continue;
fmin=10010;
for(int t=n;t!=1;t=ant[t])
fmin=min(fmin,c[ant[t]][t]-f[ant[t]][t]);
if(fmin==0)
continue;
for(int t=n;t!=1;t=ant[t])
{
f[ant[t]][t]+=fmin;
f[t][ant[t]]-=fmin;
}
}
}
}
int main()
{
in>>n>>m;
a.resize(n+5);
for(int i=1;i<=m;++i)
{
in>>x[i]>>y[i]>>z;
c[x[i]][y[i]]+=z;
c[y[i]][x[i]]+=z;
a[x[i]].push_back(y[i]);
a[y[i]].push_back(x[i]);
}
umplere();
for(int i=1;i<=m;++i)
{
if(c[x[i]][y[i]]==f[x[i]][y[i]])
{
++c[x[i]][y[i]];
if(drum())
r[++r[0]]=i;
--c[x[i]][y[i]];
}
else if(c[y[i]][x[i]]==f[y[i]][x[i]])
{
++c[y[i]][x[i]];
if(drum())
r[++r[0]]=i;
--c[y[i]][x[i]];
}
}
out<<r[0]<<'\n';
for(int i=1;i<=r[0];++i)
out<<r[i]<<'\n';
return 0;
}