Pagini recente » Cod sursa (job #2622887) | Cod sursa (job #923270) | Cod sursa (job #323952) | Cod sursa (job #1612173) | Cod sursa (job #995610)
Cod sursa(job #995610)
#include<fstream>
#include<cstring>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
ifstream f("cc.in");
ofstream g("cc.out");
int i,n,j,s,d,flux,t[300],dist[300],c[300][300],cost[300][300];
bool viz[300];
queue<int>q;
inline bool bellmanford()
{
int x;
memset(viz,0,sizeof(viz));
memset(dist,INF,sizeof(dist));
dist[s]=0;
viz[s]=1;
q.push(s);
while(!q.empty())
{
x=q.front();
q.pop();
viz[x]=0;
for(i=1;i<=d;++i)
if(c[x][i]&&dist[i]>dist[x]+cost[x][i])
{
dist[i]=dist[x]+cost[x][i];
t[i]=x;
if(!viz[i])
{
viz[i]=1;
q.push(i);
}
}
}
return dist[d]!=INF;
}
int main()
{
f>>n;
s=0;
d=2*n+1;
for(i=1;i<=n;++i)
{
c[s][i]=c[n+i][d]=1;
}
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{
f>>cost[i][n+j];
cost[n+j][i]=-cost[i][n+j];
c[i][n+j]=1;
}
flux=0;
while(bellmanford())
{
for(i=d;i!=s;i=t[i])
--c[t[i]][i],++c[i][t[i]];
flux+=dist[d];
}
g<<flux<<'\n';
return 0;
}