Pagini recente » Cod sursa (job #2460033) | Cod sursa (job #1016853) | Cod sursa (job #1700585) | Cod sursa (job #2877621) | Cod sursa (job #2479451)
#include <fstream>
#include <vector>
#include <deque>
#include <bitset>
#define inf 100000000
using namespace std;
ifstream fin("cmcm.in");
ofstream fout("cmcm.out");
int n,m,e,i,j,c[610][610],flux[610][610],z[610][610],d[610],nod,vec,t[610],M,sol;
vector <int> l[610];
bitset <610> f;
deque <int> q;
bool ok;
int edge[610][610];
bool bell(){
f.reset();
for(i=1;i<=n+m+1;i++)
d[i]=inf;
d[0]=0;
f[0]=1;
q.push_back(0);
ok=0;
while(!q.empty()){
nod=q.front();
q.pop_front();
f[nod]=0;
if(nod==n+m+1)
ok=1;
for(i=0;i<l[nod].size();i++){
vec=l[nod][i];
if(c[nod][vec]>flux[nod][vec] && d[vec]>d[nod]+z[nod][vec]){
d[vec]=d[nod]+z[nod][vec];
t[vec]=nod;
if(!f[vec]){
f[vec]=1;
q.push_back(vec);
}
}
}
}
return ok;
}
int main(){
fin>>n>>m>>e;
for(int k=1;k<=e;k++){
fin>>i>>j;
j+=n;
fin>>z[i][j]; z[j][i]=-z[i][j];
c[i][j]=1;
l[i].push_back(j);
l[j].push_back(i);
l[i].push_back(0);
l[0].push_back(i);
c[0][i]=1;
l[j].push_back(n+m+1);
l[n+m+1].push_back(j);
c[j][n+m+1]=1;
edge[i][j]=k;
edge[j][i]=k;
}
while(bell()){
nod=n+m+1; M=inf;
while(nod!=0){
M=min(M,c[t[nod]][nod]-flux[t[nod]][nod]);
nod=t[nod];
}
nod=n+m+1;
while(nod!=0){
flux[t[nod]][nod]+=M;
flux[nod][t[nod]]-=M;
nod=t[nod];
}
sol+=M*d[n+m+1];
}
int cnt=0;
for(i=1;i<=n;i++)
for(j=n;j<=n+m;j++)
if(flux[i][j]==1)
cnt++;
fout<<cnt<<" "<<sol<<"\n";
for(i=1;i<=n;i++)
for(j=n;j<=n+m;j++)
if(flux[i][j]==1)
fout<<edge[i][j]<<" ";
return 0;
}