Pagini recente » Cod sursa (job #1961920) | Cod sursa (job #23259) | Cod sursa (job #996320) | Cod sursa (job #1501759) | Cod sursa (job #2418992)
#include<fstream>
#include<queue>
#define DIM 610
#define inf 1000000000
using namespace std;
ifstream fin("cmcm.in");
ofstream fout("cmcm.out");
int n,m,k,e,i,a,b,c,mini,sol;
pair<int,int> cap[DIM][DIM];
vector<int> v[DIM];
queue<int> q;
int d[DIM],f[DIM],h[DIM][DIM],p[DIM][DIM],t[DIM];
int bellma()
{
for(int i=0;i<=k;i++) d[i]=inf,f[i]=0;
int nod;
q.push(0);f[0]=1;d[0]=0;
while(!q.empty())
{
nod=q.front();f[nod]=0;q.pop();
for(auto vecin:v[nod])
if(d[vecin]>d[nod]+p[nod][vecin]&&h[nod][vecin]<cap[nod][vecin].first)
{
d[vecin]=d[nod]+p[nod][vecin];
t[vecin]=nod;
if(!f[vecin]){q.push(vecin);f[vecin]=1;}
}
}
if(d[k]==inf) return 0;
else return 1;
}
int main()
{
fin>>n>>m>>e;t[0]=-1;
for(i=1;i<=e;i++)
{
fin>>a>>b>>c;b+=n;
v[a].push_back(b);
v[b].push_back(a);
cap[a][b].first=1;
cap[a][b].second=i;
p[a][b]=c;p[b][a]=-c;
}
for(i=1;i<=n;i++)
{
v[0].push_back(i);
v[i].push_back(0);
cap[0][i].first=1;
}
k=n+m+1;
for(i=n+1;i<=n+m;i++)
{
v[i].push_back(k);
v[k].push_back(i);
cap[i][k].first=1;
}
while(bellma()==1)
{
mini=inf;b=k;a=t[k];
while(a!=-1)
{
mini=min(mini,cap[a][b].first-h[a][b]);
b=a;a=t[a];
}
b=k;a=t[k];
while(a!=-1)
{
h[a][b]+=mini;
h[b][a]-=mini;
sol+=mini*p[a][b];
b=a;a=t[a];
}
}
int nr=0,j;
for(i=1;i<=n;i++)
for(j=n+1;j<k;j++)
if(h[i][j])
nr++;
fout<<nr<<" "<<sol<<"\n";
for(i=1;i<=n;i++)
for(j=n+1;j<k;j++)
if(h[i][j]) fout<<cap[i][j].second<<" ";
return 0;
}