Pagini recente » Cod sursa (job #2856712) | Cod sursa (job #3149228) | Cod sursa (job #2710726) | Cod sursa (job #3125517) | Cod sursa (job #2807246)
#include <bits/stdc++.h>
using namespace std;
ifstream in("critice.in");
ofstream out("critice.out");
int s[1010],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;
}
}
}
return;
}
void seturi()
{
for(int i=2;i<=n;++i)
v[i]=false;
v[1]=true;
s[1]=1;
queue<int>q;
q.push(1);
while(!q.empty())
{
int x=q.front();
q.pop();
for(auto t:a[x])
{
if(v[t]==true||c[x][t]==f[x][t])
continue;
q.push(t);
v[t]=true;
s[t]=1;
}
}
v[n]=true;
s[n]=2;
q.push(n);
while(!q.empty())
{
int x=q.front();
q.pop();
for(auto t:a[x])
{
if(v[t]==true||c[x][t]==f[x][t])
continue;
q.push(t);
v[t]=true;
s[t]=2;
}
}
return;
}
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();
seturi();
for(int i=1;i<=m;++i)
{
if(s[x[i]]==1&&s[y[i]]==2||s[x[i]]==2&&s[y[i]]==1)
r[++r[0]]=i;
}
out<<r[0]<<'\n';
for(int i=1;i<=r[0];++i)
out<<r[i]<<'\n';
return 0;
}