Pagini recente » Cod sursa (job #2839641) | Cod sursa (job #879051) | Cod sursa (job #1447985) | Cod sursa (job #1061341) | Cod sursa (job #1760269)
#include<stdio.h>
#define Nm 1001
#define Mm 10001
#define Inf Nm*10000
#define min(a,b) ((a)<(b)?(a):(b))
int G[Nm][Nm],C[Nm][Nm],X[Mm],Y[Mm],D[Nm],n,m;
int F[Nm][Nm],A[Mm],Q[Nm],Pre[Nm],M[Nm],S[Nm],T[Nm];
void read(){int i,c;freopen("critice.in","r",stdin);scanf("%d%d",&n,&m);for(i=1;i<=m;i++){scanf("%d%d%d",X+i,Y+i,&c);G[X[i]][D[X[i]]++]=Y[i];G[Y[i]][D[Y[i]]++]=X[i];C[X[i]][Y[i]]=C[Y[i]][X[i]]=c;}}
int BFS_s(){
int l,r,x,y,i;
Q[l=r=0]=1;
Pre[1]=-1;
M[1]=Inf;
for(i=2;i<=n;i++)Pre[i]=0;
while(l<=r){
x=Q[l++];
for(i=0;i<D[x];i++){
y=G[x][i];
if(!Pre[y] && F[x][y]<C[x][y]){
Pre[y]=x;
M[y]=min(M[x],C[x][y]-F[x][y]);
Q[++r]=y;
}
}
}
return Pre[n]!=0;
}
void BFS_t(){
int l,r,x,y,i;
Q[l=r=0]=n;
T[n]=1;
while(l<=r){
x=Q[l++];
for(i=0;i<D[x];i++){
y=G[x][i];
if(!T[y] && F[y][x]<C[y][x]){T[y]=1;Q[++r]=y;}
}
}
}
void solve(){int i;
while(BFS_s()){i=n;while(i>1){F[Pre[i]][i]+=M[n];F[i][Pre[i]]-=M[n];i=Pre[i];}}
for(i=1;i<=n;i++)if(Pre[i]){S[i]=1;}
BFS_t();A[0]=0;
for(i=1;i<=m;i++){if(S[X[i]]&&T[Y[i]]||S[Y[i]]&&T[X[i]])A[++A[0]]=i;}
}
void write(){int i;freopen("critice.out","w",stdout);printf("%d\n",A[0]);for(i=1;i<=A[0];i++)printf("%d\n",A[i]);}
int main(){read();solve();write();return 0;}