Pagini recente » Cod sursa (job #2595692) | Cod sursa (job #2368666) | Cod sursa (job #3190837) | Cod sursa (job #1433216) | Cod sursa (job #748631)
Cod sursa(job #748631)
#include <cstdio>
#include <vector>
using namespace std;
int c[1024][1024],f[1024][1024],aux[1024][1024],v[1024],q[1024],w[10001],p[1024],vis[1024],n;
vector <int> g[1024];
int bfs()
{
int i,j,a,b;
for (i=2;i<=n;++i) v[i]=0;
v[1]=1;q[0]=1;q[1]=1;
for (i=1;i<=q[0];++i)
{
a=q[i];
if (a!=n)
for (j=0;j<g[a].size();++j)
{
b=g[a][j];
if ((c[a][b]>f[a][b])&&(!v[b]))
{
++q[0];
q[q[0]]=b;
p[b]=a;
v[b]=1;
}
}
}
return v[n];
}
void dfs(int x,int y)
{
int i;
for (i=0;i<g[x].size();++i)
if (c[x][g[x][i]]-f[x][g[x][i]]&&!vis[g[x][i]])
{
vis[g[x][i]]=y;
dfs(g[x][i],y);
}
}
int main()
{
int sol=0,m,i,j,a,x,y,z,t;
freopen("critice.in","r",stdin);
freopen("critice.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
g[x].push_back(y);
g[y].push_back(x);
c[x][y]=z;
c[y][x]=z;
aux[x][y]=i;
aux[y][x]=i;
}
while (bfs())
for (i=0;i<g[n].size();++i)
{
a=g[n][i];
if ((c[a][n]>f[a][n])&&v[a])
{
p[n]=a;
t=200000;
for (a=n;a!=1;a=p[a])
t=min(t,c[p[a]][a]-f[p[a]][a]);
a=p[n];
for (a=n;a!=1;a=p[a])
{
f[p[a]][a]+=t;
f[a][p[a]]-=t;
}
}
}
vis[1]=1;
vis[n]=2;
dfs(1,1);
dfs(n,2);
for (i=1;i<=n;++i)
for (j=0;j<g[i].size();++j)
if (c[i][g[i][j]]&&(c[i][g[i][j]]-f[i][g[i][j]]==0||c[i][g[i][j]]+f[i][g[i][j]]==0)&&vis[i]==1&&vis[g[i][j]]==2)
{
++sol;
w[sol]=aux[i][g[i][j]];
}
printf("%d\n",sol);
for (i=1;i<=sol;++i)
printf("%d\n",w[i]);
return 0;
}