Pagini recente » Cod sursa (job #2092824) | Cod sursa (job #567349) | Cod sursa (job #1398130) | Cod sursa (job #1307452) | Cod sursa (job #2480207)
#include <fstream>
#include <vector>
#include <deque>
#define DIM 620
#define INF 2147483647
using namespace std;
ifstream fin ("cmcm.in");
ofstream fout("cmcm.out");
int n,m,a,e,i,j,gasit,nod,vecin,cost,sol,v[DIM],ok[DIM],T[DIM],C[DIM][DIM],F[DIM][DIM],D[DIM],Z[DIM][DIM],x,y,z,k,im[DIM][DIM];
vector<int> L[DIM];
deque<int> q;
int bf(){
gasit=0;
for (i=1;i<=a;i++){
ok[i]=0;
D[i]=INF;
}
D[0]=0;
ok[0]=1;
q.push_back(0);
while (!q.empty()){
nod=q.front();
q.pop_front();
ok[nod]=0;
for (unsigned int i=0;i<L[nod].size();i++){
vecin=L[nod][i];
cost=Z[nod][vecin];
if (C[nod][vecin]>F[nod][vecin] && D[nod]+cost<D[vecin]){
T[vecin]=nod;
D[vecin]=D[nod]+cost;
if (!ok[vecin]){
ok[vecin]=1;
q.push_back(vecin);
if (vecin==a)
gasit=1;
}
}
}
}
return gasit;
}
int main(){
fin>>n>>m>>e;
for (i=1;i<=e;i++){
fin>>x>>y>>z;
L[x].push_back(n+y);
L[n+y].push_back(x);
C[x][n+y]=1;
Z[x][n+y]=z;
Z[n+y][x]=-z;
im[x][n+y]=i;
}
a=n+m+1;
for (i=1;i<=n;i++){
L[0].push_back(i);
L[i].push_back(0);
C[0][i]=1;
}
for (i=1;i<=m;i++){
L[a].push_back(n+i);
L[n+i].push_back(a);
C[n+i][a]=1;
}
while (bf()){
for (nod=a;nod!=0;nod=T[nod]){
F[T[nod]][nod]++;
F[nod][T[nod]]--;
}
sol+=D[a];
}
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (F[i][n+j]==1)
v[++k]=im[i][n+j];
fout<<k<<" "<<sol<<'\n';
for (i=1;i<=k;i++)
fout<<v[i]<<" ";
fin.close();
fout.close();
return 0;
}