Pagini recente » Cod sursa (job #2292815) | Cod sursa (job #2691716) | Cod sursa (job #3145139) | Cod sursa (job #1183190) | Cod sursa (job #1760267)
#include<cstdio>
#define Nm 1001
#define Mm 10001
#define Inf Nm*10000
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
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;
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;}