Pagini recente » Cod sursa (job #1998491) | Cod sursa (job #561575) | Cod sursa (job #1178061) | Cod sursa (job #1125250) | Cod sursa (job #751312)
Cod sursa(job #751312)
# include <fstream>
# include <iostream>
# include <vector>
# include <algorithm>
# include <queue>
# define DIM 1003
# define INF 32000
# define pb push_back
# define mp make_pair
# define fs first
# define sc second
# define sint short int
using namespace std;
sint n, m, c[DIM][DIM], index[DIM][DIM], t[DIM], r[10*DIM];
vector<sint>G[DIM];
vector< pair<sint,sint> >L;
void read ()
{
ifstream fin ("critice.in");
fin>>n>>m;
for(sint i=1;i<=m;++i)
{
sint 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;
}
}
bool bfs (sint s, sint f)
{
queue<sint>Q;
for(sint i=1;i<=n;++i)
t[i]=-1;
Q.push(s);
sint k;
t[s]=0;
while(Q.size())
{
k=Q.front();Q.pop();
for(vector<sint>::iterator I=G[k].begin();I!=G[k].end();++I)
if (t[*I]==-1 && c[k][*I])
{
t[*I]=k;
if (*I==f)return true;
Q.push(*I);
}
}
return false;
}
void EK ()
{
sint cmin;
while(bfs(1,n))
{
cmin=INF;
for(sint i=n;t[i];i=t[i])
cmin=min(cmin,c[i][t[i]]);
for(sint 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<sint,sint> >::iterator I=L.begin();I!=L.end();++I)
{
sint i=I->fs, j=I->sc;
if ((i==1 || bfs(i,1)) && (j==n || bfs(j,n)))
r[index[i][j]]=1, ++r[0];
}
}
int main ()
{
read ();
EK ();
comp ();
ofstream fout ("critice.out");
fout<<r[0]<<"\n";
for(int i=1;i<=m;++i)
if (r[i])
fout<<i<<"\n";
return 0;
}