Pagini recente » Cod sursa (job #2756449) | Cod sursa (job #1246687) | Cod sursa (job #851953) | Profil Ryuzaki | Cod sursa (job #175049)
Cod sursa(job #175049)
#include<cstdio>
#include<vector>
int n,m,T[1001],c[1001][1001],x,y,cst,l[1001],i,j,lm[10001][2];
std::vector<int> a[1001];
int bf()
{
int st=0,dr=0,vf;
memset(T,0,sizeof(T));
l[st]=1;
T[1]=1;
while(st<=dr)
{
vf=l[st];
for(i=0;i<a[vf].size();i++)
if(c[vf][a[vf][i]] && !T[a[vf][i]])
{
T[a[vf][i]]=vf;
l[++dr]=a[vf][i];
}
st++;
}
return T[n];
}
inline void flux()
{
int r;
while(bf())
for(i=1;i<n;i++)
if(c[i][n]>0)
{
r=c[i][n];
for(j=i;j!=1 && r;j=T[j])
if(r>c[j][T[j]]) r=c[j][T[j]];
if(!r) continue;
c[i][n]-=r;
c[n][i]-=n;
for(j=i;j!=1;j=T[j])
c[j][T[j]]-=r,c[T[j]][j]-=r;
}
}
inline void bf2(int vf,int parte)
{
int st=0,dr=0;
l[0]=vf;
T[vf]=parte;
while(st<=dr)
{
vf=l[st];
for(i=0;i<a[vf].size();i++)
if(c[vf][a[vf][i]] && !T[a[vf][i]])
{
T[a[vf][i]]=parte;
l[++dr]=a[vf][i];
}
st++;
}
}
inline void solve()
{
memset(T,0,sizeof(T));
bf2(1,1);
bf2(n,2);
int st=0;
for(i=1;i<=m;i++)
if(!c[lm[i][0]][lm[i][1]] && T[lm[i][1]] && T[lm[i][0]] && T[lm[i][0]]!=T[lm[i][1]])
l[++st]=i;
printf("%d\n",st);
for(i=1;i<=st;i++)
printf("%d\n",l[i]);
}
int main()
{
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,&cst);
a[x].push_back(y);
a[y].push_back(x);
c[x][y]=c[y][x]=cst;
lm[i][0]=x;lm[i][1]=y;
}
flux();
solve();
fclose(stdout);
return 0;
}