Pagini recente » Cod sursa (job #544778) | Cod sursa (job #2967387) | Cod sursa (job #142266) | Cod sursa (job #577983) | Cod sursa (job #1582995)
#include <fstream>
#include <deque>
#include <vector>
#define N 602
using namespace std;
ifstream f("cmcm.in");
ofstream g("cmcm.out");
const int oo=1000000000;
int L,R,K,sol,s,d,a,b,e,cst,i,E[N][N],C[N][N],c[N][N],Cst[N],q[N],T[N],bellman();
void upd();
deque<int> Q;
vector<int> v[N],Sol;
int main()
{
f>>L>>R>>e;
for(i=1;i<=e;i++)
{
f>>a>>b>>cst;
b+=L;
C[a][b]=1;c[a][b]=cst;c[b][a]=-cst;
E[a][b]=i;
v[a].push_back(b);
v[b].push_back(a);
}
s=0;d=L+R+1;
for(i=1;i<=L;i++)
{
C[s][i]=1;
v[s].push_back(i);
}
for(i=L+1;i<d;i++)
{
C[i][d]=1;
v[i].push_back(d);
}
for(;bellman();)
upd();
for(i=1;i<=L;i++)
for(auto it:v[i])
if(C[i][it]==0&&it!=s)
Sol.push_back(E[i][it]);
g<<Sol.size()<<' '<<K<<'\n';
for(auto it:Sol)
g<<it<<' ';
return 0;
}
int bellman()
{
for(i=1;i<=d;i++)
Cst[i]=oo;
Q.push_back(s);
q[s]=1;
while(Q.size())
{
a=Q.front();
Q.pop_front();
q[a]=0;
cst=Cst[a];
for(auto it:v[a])
if(C[a][it])
if(Cst[it]>cst+c[a][it])
{
Cst[it]=cst+c[a][it];
T[it]=a;
if(!q[it])
{
Q.push_back(it);
q[it]=1;
}
}
}
if(Cst[d]==oo)
return 0;
return 1;
}
void upd()
{
for(a=d;a!=T[a];a=T[a])
{
C[T[a]][a]=0;
C[a][T[a]]=1;
K+=c[T[a]][a];
}
}