Pagini recente » Cod sursa (job #2803786) | Cod sursa (job #340598) | Cod sursa (job #1427399) | Cod sursa (job #1005851) | Cod sursa (job #1266571)
#include <fstream>
#include <list>
#include <queue>
#include <bitset>
#define DIM 211
#define INF 2000000011
using namespace std;
ifstream f("cc.in");
ofstream g("cc.out");
int n,minim;
int T[DIM],D[DIM];
int C[DIM][DIM],F[DIM][DIM],CT[DIM][DIM];
long long sol;
list<int> L[DIM];
queue<int> q;
bitset<DIM> viz;
inline int bellmanford(){
register int i,nod;
list<int>::iterator it;
viz.reset();
for(i=1;i<=2*n+1;i++)
D[i]=INF,T[i]=-1;
T[0]=-1;
q.push(0);
viz[0]=1;
while(!q.empty()){
nod=q.front(),q.pop(),viz[nod]=0;
for(it=L[nod].begin();it!=L[nod].end();it++){
if(C[nod][*it]>F[nod][*it] && D[nod]+CT[nod][*it]<D[*it]){
D[*it]=D[nod]+CT[nod][*it];
T[*it]=nod;
if(!viz[*it])
viz[*it]=1,q.push(*it);
}
}
}
if(D[2*n+1]!=INF) return 1;
return 0;
}
int main(void){
register int i,j,x;
f>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
f>>x;
L[i].push_back(j+n);
L[j+n].push_back(i);
C[i][j+n]=1;
CT[i][j+n]=x;
CT[j+n][i]=-x;
}
}
for(i=1;i<=n;i++){
L[0].push_back(i);
L[i+n].push_back(2*n+1);
C[0][i]=1;
C[i+n][2*n+1]=1;
}
while(bellmanford()){
x=2*n+1;
while(T[x]>=0){
F[T[x]][x]++;
F[x][T[x]]--;
x=T[x];
}
sol+=D[2*n+1];
}
g<<sol;
f.close();
g.close();
return 0;
}