Pagini recente » Cod sursa (job #2530036) | Cod sursa (job #2833139) | Cod sursa (job #1632202) | Cod sursa (job #1691332) | Cod sursa (job #751308)
Cod sursa(job #751308)
# include <fstream>
# include <iostream>
# include <vector>
# include <algorithm>
# include <queue>
# define DIM 1003
# define INF 2000000000
# define pb push_back
# define mp make_pair
# define fs first
# define sc second
using namespace std;
int n, m, c[DIM][DIM], index[DIM][DIM], v[DIM], t[DIM];
vector<int>G[DIM], R;
vector< pair<int,int> >L;
void read ()
{
ifstream fin ("critice.in");
fin>>n>>m;
for(int i=1;i<=m;++i)
{
int x, y, z;
fin>>x>>y>>z;
G[x].pb(y);
G[y].pb(x);
c[x][y]=c[y][x]=z;
index[x][y]=index[y][x]=i;
}
}
int bfs (int s, int f)
{
queue<int>Q;
for(int i=1;i<=n;++i)
v[i]=0, t[i]=0;
Q.push(s);
int k;
while(Q.size())
{
k=Q.front();Q.pop();
if (!v[k])
{
v[k]=1;
for(vector<int>::iterator I=G[k].begin();I!=G[k].end();++I)
if (!v[*I] && c[k][*I])
{
t[*I]=k;
if (*I==f)return 1;
Q.push(*I);
}
}
}
return 0;
}
void EK ()
{
int cmin;
while(bfs(1,n))
{
cmin=INF;
for(int i=n;t[i];i=t[i])
cmin=min(cmin,c[i][t[i]]);
for(int i=n;t[i];i=t[i])
{
c[i][t[i]]-=cmin;
c[t[i]][i]-=cmin;
if (!c[i][t[i]])
L.pb(mp(t[i],i));
}
}
}
void comp ()
{
for(vector< pair<int,int> >::iterator I=L.begin();I!=L.end();++I)
{
int i=I->fs, j=I->sc;
if ((i==1 || bfs(i,1)) && (j==n || bfs(j,n)))
R.pb(index[i][j]);
}
sort(R.begin(),R.end());
}
int main ()
{
read ();
EK ();
comp ();
ofstream fout ("critice.out");
fout<<R.size()<<"\n";
for(vector<int>::iterator I=R.begin();I!=R.end();++I)
fout<<*I<<"\n";
return 0;
}