Pagini recente » Cod sursa (job #3033379) | Cod sursa (job #1986322) | Cod sursa (job #3137726) | Cod sursa (job #1561741) | Cod sursa (job #1131458)
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream f("cmcm.in");
ofstream g("cmcm.out");
vector<int> a[610];
queue<int> Q;
//priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
int j,pred[610],viz[610],rez[610][610],dist[610],fl[610][610],cost[610][610],muc[610][610],m,e,i,n,x,y,c;
int bellmanford()
{
for(i=2;i<=n+m+2;i++)
dist[i]=2000000000;
memset(viz,0,sizeof(viz));
memset(pred,0,sizeof(pred));
Q.push(1);
while(!Q.empty())
{
x=Q.front();
Q.pop();
viz[x]=0;
for(vector<int>::iterator it=a[x].begin();it!=a[x].end();it++)
{
if(fl[x][*it]&&dist[x]+cost[x][*it]<dist[*it])
{
if(!viz[*it])
{
Q.push(*it);
viz[*it]++;
}
pred[*it]=x;
dist[*it]=cost[x][*it]+dist[x];
}
}
}
return pred[n+m+2];
}
int main()
{
f>>n>>m>>e;
for(i=1;i<=e;i++)
{
f>>x>>y>>c;
a[x+1].push_back(y+n+1);
a[y+n+1].push_back(x+1);
fl[x+1][y+n+1]=1;
cost[x+1][y+n+1]=c;
cost[y+n+1][x+1]=-c;
muc[x+1][y+n+1]=i;
}
for(i=2;i<=n+1;i++)
{
a[1].push_back(i);
a[i].push_back(1);
fl[1][i]=1;
}
for(i=n+2;i<=n+m+1;i++)
{
a[n+m+2].push_back(i);
a[i].push_back(n+m+2);
fl[i][n+m+2]=1;
}
y=0;
while(bellmanford())
{
x=n+m+2;
while(pred[x])
{
fl[pred[x]][x]--;
fl[x][pred[x]]++;
y+=cost[pred[x]][x];
rez[pred[x]][x]++;
rez[x][pred[x]]--;
x=pred[x];
}
}
x=0;
for(i=2;i<=n+1;i++)
{
for(j=n+2;j<=n+m+1;j++)
{
if(rez[i][j]==1)
{
x++;
break;
}
}
}
g<<x<<" ";
g<<y<<'\n';
for(i=2;i<=n+1;i++)
{
for(j=n+2;j<=n+m+1;j++)
{
if(rez[i][j]==1)
{
g<<muc[i][j]<<" ";
break;
}
}
}
g<<'\n';
return 0;
}