Pagini recente » Cod sursa (job #2741413) | Cod sursa (job #1750182) | Cod sursa (job #205423) | Cod sursa (job #953420) | Cod sursa (job #2485734)
#include <iostream>
#include <fstream>
#include <bitset>
#include <deque>
#include <vector>
#define DIM 205
using namespace std;
ifstream fin ("cc.in");
ofstream fout ("cc.out");
bitset <DIM> viz;
vector<int> L[DIM];
deque<int> q;
int n,i,vecin,x,y,s,d,c,nod,cost,j;
int Z[DIM][DIM],C[DIM][DIM],F[DIM][DIM],D[DIM],T[DIM];
int bell(){
int gasit=0;
viz.reset();
q.clear();
q.push_back(s);
viz[s]=1;
for(i=0;i<=2*n+1;i++)
D[i]=1000000000;
D[s]=0;
while(!q.empty()){
x=q.front();
q.pop_front();
viz[x]=0;
for(i=0;i<L[x].size();i++){
if(C[x][L[x][i]] > F[x][L[x][i]]){
y=L[x][i];
if(D[y]>D[x]+Z[x][y]){
D[y]=D[x]+Z[x][y];
T[y]=x;
if(viz[vecin]==0) {
q.push_back(y);
viz[y]=1;
}
if(y==d)
gasit=1;
}
}
}
}
return gasit;
}
int main(){
fin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
fin>>x;
L[i].push_back(n+j);
L[n+j].push_back(i);
Z[i][n+j]=x;
Z[n+j][i]=-x;
C[i][n+j]=1;
}
C[0][i]=1;
C[n+i][2*n+1]=1;
L[0].push_back(i);
L[i].push_back(0);
L[n+i].push_back(2*n+1);
L[2*n+1].push_back(n+i);
}
s=0;
d=2*n+1;
while(bell()){
nod=d;
while(nod!=s){
F[T[nod]][nod]++;
F[nod][T[nod]]--;
cost+=Z[T[nod]][nod];
nod=T[nod];
}
}
fout<<cost<<"\n";
return 0;
}