Pagini recente » Cod sursa (job #2189866) | Cod sursa (job #579531) | Cod sursa (job #1132203) | Cod sursa (job #1854879) | Cod sursa (job #392445)
Cod sursa(job #392445)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
struct muchie{int a,b,c;
bool ok;} x[ 10010 ];
vector<int> v[ 1005 ];
int i,j,k,l,m,n,q[ 1005 ],t[ 1005 ],nr,c[1002][1002],Flux,flux;
int dfs(){
int p = 1,u=1,N,i;
memset(t,0,sizeof(t));
q[1] = 1;
int x;
t[1] = -1;
while(p <= u)
{x = q[p];
N = v[x].size();
for(i = 0; i < N ; i++)
if(!t[v[x][i]] && c[x][v[x][i]])
{t[v[x][i]] = x;
if(v[x][i] != n){
u++;
q[u] = v[x][i];}
}
p++;
}
return tata[n];
}
int calc_flux(){
memset(c,0,sizeof(c));
int i,sol = 0,Min;
for(i = 1 ; i <= m ; i++)
c[x[i].a][x[i].b] = c[x[i].b][x[i].a] = x[i].c;
while(dfs()){
Min = 1<<30;
for(j = 0; j < v[n].size() ; j++)
if(t[v[n][j])
{Min = c[n][t[v[n][i]];
for(i = v[n][j] ; t[i] != n ; i = t[i])
if(c[i][t[i]] < Min)Min = c[i][t[i]];
sol+= Min;
c[v[n][j]][n] -= Min; c[n][v[n][j]] -= Min;
for(i = v[n][j] ; t[i] != n ; i = t[i]){
c[i][t[i]] -= Min;
c[t[i]][i] -= Min;
}
}
}
return sol;
}
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[i].a,&x[i].b,&x[i].c);
v[x[i].a].push_back(x[i].b);
v[x[i].b].push_back(x[i].a);
}
Flux = calc_flux();
for(i = 1 ; i <= m ; i++)
if(c[x[i].a][x[i].b] == 0)
x[i].ok = true;
for(i = 1 ; i <= m ; i++)
if(x[i].ok)
{x[i].c ++;
flux = calc_flux();
if(flux <= Flux)
x[i].ok = false;
else
nr++;
x[i].c --;
}
printf("%d\n",nr);
for(i = 1 ; i <= m ; i++)
if(x[i].ok)
printf("%d\n",i);
return 0;}