Pagini recente » Cod sursa (job #850846) | Cod sursa (job #1269972) | Cod sursa (job #2130368) | Cod sursa (job #1289559) | Cod sursa (job #751326)
Cod sursa(job #751326)
# 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], t[DIM];
vector<sint>G[DIM], R;
vector< pair<sint,sint> >M;
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;
M.pb(mp(x,y));
}
}
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;
Q.push(*I);
}
}
if (t[f]!=-1)return true;
return false;
}
void EK ()
{
sint cmin;
while(bfs(1,n))
{
for(vector<sint>::iterator I=G[n].begin();I!=G[n].end();++I)
{
cmin=c[n][*I];
for(sint i=*I;t[i];i=t[i])
cmin=min(cmin,c[i][t[i]]);
c[n][*I]-=cmin;
c[*I][n]-=cmin;
for(sint i=*I;t[i];i=t[i])
{
c[i][t[i]]-=cmin;
c[t[i]][i]-=cmin;
}
}
}
}
void bf (sint s, sint v[])
{
queue<sint>Q;
Q.push(s);
sint k;
v[s]=1;
while(Q.size())
{
k=Q.front();Q.pop();
for(vector<sint>::iterator I=G[k].begin();I!=G[k].end();++I)
if (!v[*I] && c[k][*I])
{
v[*I]=1;
Q.push(*I);
}
}
}
void comp ()
{
sint v1[DIM], v2[DIM];
for(sint i=1;i<=n;++i)
v1[i]=v2[i]=0;
bf(1, v1);
bf(n, v2);
for(int k=0;k<m;++k)
{
sint i=M[k].fs, j=M[k].sc;
if (!c[i][j])
if ((v1[i] && v2[j]) || (v1[j] && v2[i]))
R.pb(k+1);
}
}
int main ()
{
read ();
EK ();
comp ();
ofstream fout ("critice.out");
fout<<R.size()<<"\n";
for(sint i=0;i<(sint)R.size();++i)
fout<<R[i]<<"\n";
return 0;
}