Pagini recente » Profil M@2Te4i | Cod sursa (job #1636746) | Cod sursa (job #1006790) | Cod sursa (job #2753521) | Cod sursa (job #2233879)
#include<fstream>
#include<iostream>
#include<vector>
#include<queue>
#define DN 1005
#define x first
#define y second
#define pb push_back
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m,a,b,c,cap[DN][DN],viz[DN],pr[DN],f[DN][DN],pr2[DN];
int r[10*DN],nod,fmin,nr,val,fr[10*DN],ma,t;
vector<pair<int,int> >v[DN];
queue<int>q;
int vf()
{
for(int i=1;i<=n;i++)
viz[i]=0;
q.push(1);
while(!q.empty())
{
nod=q.front();
q.pop();
viz[nod]=1;
if(nod==n)
continue;
for(auto i:v[nod])
if(!viz[i.x]&&f[nod][i.x]!=cap[nod][i.x])
{
viz[i.x]=1;
pr[i.x]=nod;
pr2[i.x]=i.y;
q.push(i.x);
}
}
return viz[n];
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>a>>b>>c;
cap[a][b]=cap[b][a]=c;
v[a].pb({b,i});
v[b].pb({a,i});
}
while(vf())
{
a=0;
ma=0;
for(auto i:v[n])
if(viz[i.x])
{
pr[n]=i.x;
nod=n;
fmin=1e6;
nr=0;
while(nod!=1)
{
val=cap[pr[nod]][nod]-f[pr[nod]][nod];
if(val<fmin)
{
fmin=val;
nr=1;
}
else
if(val==fmin)
nr++;
nod=pr[nod];
}
nod=n;
t=0;
while(nod!=1)
{
t++;
val=cap[pr[nod]][nod]-f[pr[nod]][nod];
if(val==fmin&&t>ma)
{
ma=t;
a=pr2[nod];
//cout<<pr2[nod]<<'\n';
}
f[pr[nod]][nod]+=fmin;
f[nod][pr[nod]]-=fmin;
nod=pr[nod];
}
}
//cout<<'\n';
r[a]=1;
}
nr=0;
for(int i=1;i<=m;i++)
if(r[i])
nr++;
fout<<nr<<'\n';
for(int i=1;i<=m;i++)
if(r[i])
fout<<i<<'\n';
}