Pagini recente » Cod sursa (job #750590) | Cod sursa (job #2157129) | Cod sursa (job #1398413) | Cod sursa (job #1694461) | Cod sursa (job #2680094)
#include <bits/stdc++.h>
using namespace std;
ifstream r("cc.in");
ofstream w("cc.out");
int n, f[256][256], a[256][256], dist[256], parent[256];
int bf()
{
memset(parent, -1, sizeof(parent));
memset(dist, 0x3f3f3f3f, sizeof(dist));
dist[0]=0;
parent[0]=0;
int ok=1;
while(ok==1)
{
ok=0;
for(int i=0; i<=2*n+1; i++)
{
for(int j=0; j<=2*n+1; j++)
{
if( f[i][j]>0 && dist[j] > dist[i]+ a[i][j])
{
dist[j]=dist[i] + a[i][j];
parent[j]=i;
ok=1;
}
}
}
}
if( parent[2*n+1] ==-1){
return 0;
}
return 1;
}
void flux()
{
for(int i=1; i<=n; i++){
f[0][i]=f[n+i][2*n+1]=1;
}
while(bf())
{
int p= 2*n+1;
while(p)
{
f[parent[p]][p]--;
f[p][parent[p]]++;
p=parent[p];
}
}
int sum=0;
for(int i=1; i<=n; i++){
for(int j=n+1; j<=2*n; j++){
if(f[i][j]==0){
sum+= a[i][j];
}
}
}
w<<sum<<"\n";
}
int main()
{
r>>n;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++)
{
r>>a[i][j+n];
a[j+n][i]=-a[i][j+n];
f[i][j+n]=1;
}
}
flux();
return 0;
}