Pagini recente » Cod sursa (job #2402409) | Cod sursa (job #1658164) | Cod sursa (job #2371335) | Cod sursa (job #1587562) | Cod sursa (job #1518006)
#include<cstdio>
#include<vector>
#include<queue>
#define INF 2000000000
using namespace std;
vector<int>L[1010];
queue<int>q;
int n,m,e,i,j,a,b,aa,s,d,ss,sss,v[1010],x[611][611],c[611][611],M[611][611],D[1010],w[611][611],t[1010];
FILE *f,*g;
int bf(){
for(i=1;i<=d;i++){
v[i]=t[i]=0;
D[i]=INF;
}
D[s]=0;
q.push(s);
t[s]=-1;
while(!q.empty()){
a=q.front();
q.pop();
v[a]=0;
for(int i=0;i<L[a].size();i++){
b=L[a][i];
if( D[b] > D[a] + x[a][b] && c[a][b] > w[a][b] ){
D[b] = D[a] + x[a][b];
t[b]=a;
if( v[b] == 0 ){
q.push(b);
v[b]=1;
}
}
}
}
return D[d]!=INF;
}
int main(){
f=fopen("cmcm.in","r");
g=fopen("cmcm.out","w");
fscanf(f,"%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++){
fscanf(f,"%d%d%d",&a,&b,&aa);
L[a].push_back(b+n);
L[b+n].push_back(a);
c[a][b+n]=1;
x[a][b+n]=aa;
x[b+n][a]=-aa;
M[a][b+n]=M[b+n][a]=i;
}
s=0;
for(i=1;i<=n;i++){
L[s].push_back(i);
L[i].push_back(s);
c[s][i]=1;
}
d=n+m+1;
for(i=1;i<=m;i++){
L[d].push_back(i+n);
L[i+n].push_back(d);
c[i+n][d]=1;
}
while(bf()){
a=t[d];
aa=INF;
while( t[a]!=-1 ){
if( aa > c[ t[a] ][a] - w[ t[a] ][a] )
aa = c[ t[a] ][a] - w[ t[a] ][a];
a=t[a];
}
a=d;
while( t[a]!=-1 ){
w[ t[a] ][a] += aa;
w[a][ t[a] ] -= aa;
a=t[a];
}
ss += aa;
sss += aa * D[d];
}
fprintf(g,"%d %d\n",ss,sss);
for(i=1;i<=n;i++){
for(j=0;j<L[i].size();j++){
if( w[i][ L[i][j] ] == 1 )
fprintf(g,"%d ",M[i][ L[i][j] ]);
}
}
fclose(f);
fclose(g);
return 0;
}