Pagini recente » Cod sursa (job #301670) | Cod sursa (job #1265710) | Cod sursa (job #5291) | Cod sursa (job #1227155) | Cod sursa (job #2942293)
#include <fstream>
#include<vector>
#include <algorithm>
#import <cmath>
#import <cassert>
#import <queue>
using namespace std;
vector<vector<int>>f,d,a;
vector<int>t;
int n;
bool bfs()
{
vector<bool>viz(n+1,0);
viz[1]=1;
queue<int>q;q.push(1);
while(q.size())
{
int nod=q.front();
q.pop();
for(auto &c:a[nod])
{
if(viz[c] || f[nod][c]==0)continue;
viz[c]=1;
t[c]=nod;
if(c!=n)q.push(c);
}
}
return viz[n];
}
vector<int>ok;
void dfs(int nod)
{
ok[nod]=1;
for(auto &c:a[nod])
{
if(!ok[c])
{
if(!f[nod][c] || !f[c][nod])
{
d[nod][c]++;
d[c][nod]++;
}
else
{
dfs(c);
}
}
}
}
vector<pair<int,int>>q;
main()
{
ifstream cin("critice.in");
ofstream cout("critice.out");
int m;
cin>>n>>m;
q.resize(m);
a.resize(n+1);
t.resize(n+1);
for(auto &c:t)
{
c=1;
}
f=d=vector<vector<int>>(n+1,vector<int>(n+1,0));
for(auto &s:q)
{
int x,y,c;
cin>>x>>y>>c;
f[x][y]=f[y][x]=c;
a[x].push_back(y);
a[y].push_back(x);
s={x,y};
}
while(bfs())
{
for(auto &c:a[n])
{
t[n]=c;
int val=2e9;
for(int i=n;i!=1;i=t[i])
{
val=min(val,f[t[i]][i]);
}
for(int i=n;i!=1;i=t[i])
{
f[t[i]][i]-=val;
f[i][t[i]]+=val;
}
}
}
ok=vector<int>(n+1,0);
dfs(1);
ok=vector<int>(n+1,0);
dfs(n);
vector<int>rez;
for(int i=0;i<m;i++)
{
if(d[q[i].first][q[i].second]==2)
{
rez.push_back(i+1);
}
}
cout<<rez.size()<<'\n';
for(auto &c:rez)cout<<c<<'\n';
}