Pagini recente » Cod sursa (job #2702037) | Cod sursa (job #2832757) | Cod sursa (job #2695445)
#include<bits/stdc++.h>
#define inf 2147000000
using namespace std;
ifstream f("cmcm.in");
ofstream g("cmcm.out");
vector <int> v[605];
queue <int> q;
int n,n2,m;
int s,t,c[605][605],cost[605][605],fol[605][605],mx[50005],my[50005],use[605],ant[605],dmin[605];
int BellmanFord()
{
int i,j,nod,nod2,newc;
for(i=1; i<=t; i++)
{
use[i]=0;
ant[i]=0;
dmin[i]=inf;
}
q.push(s);
dmin[s]=0;
while(!q.empty())
{
nod=q.front();
q.pop();
use[nod]=0;
if (nod==t) continue;
for(i=0; i<v[nod].size(); i++)
{
nod2=v[nod][i];
newc=dmin[nod]+cost[nod][nod2];
if (fol[nod][nod2]>=c[nod][nod2] || newc>=dmin[nod2]) continue;
dmin[nod2]=newc;
if (!use[nod2])
{
q.push(nod2);
use[nod2]=1;
}
ant[nod2]=nod;
}
}
return (dmin[t]!=inf);
}
void Flux()
{
int i,x,res,sol=0,cmax=0;
while(BellmanFord())
{
x=t;
res=inf;
while(ant[x])
{
res=min(res,c[ant[x]][x]-fol[ant[x]][x]);
x=ant[x];
}
x=t;
sol+=dmin[t]*res;
while(ant[x])
{
fol[ant[x]][x]+=res;
fol[x][ant[x]]-=res;
x=ant[x];
}
cmax++;
}
g<<cmax<<" "<<sol<<"\n";
for(i=1; i<=m; i++)
if (fol[mx[i]][my[i]+n]>0)
g<<i<<" ";
}
int main()
{
int i,cst,nod,nod2;
f>>n>>n2>>m;
s=n+n2+1;
t=s+1;
for(i=1; i<=n; i++)
{
v[s].push_back(i);
c[s][i]=1;
cost[s][i]=0;
}
for(i=1; i<=n2; i++)
{
v[n+i].push_back(t);
c[n+i][t]=1;
cost[n+i][t]=0;
}
for(i=1; i<=m; i++)
{
f>>mx[i]>>my[i]>>cst;
nod=mx[i];
nod2=my[i]+n;
v[nod].push_back(nod2);
v[nod2].push_back(nod);
c[nod][nod2]=1;
cost[nod][nod2]=cst;
cost[nod2][nod]=-cst;
}
Flux();
return 0;
}