Pagini recente » Cod sursa (job #768886) | Cod sursa (job #1123981) | Cod sursa (job #2093112) | Cod sursa (job #2680505) | Cod sursa (job #953777)
Cod sursa(job #953777)
#include<fstream>
#define INF 999999999
using namespace std;
ifstream f("harta.in");
ofstream g("harta.out");
int p,u,sol,fluxm,d,cur,i,j,n,x,y,fl[205][205],q[205],t[205],viz[205],c[205][205];
void bfs()
{
viz[1]=cur;
p=u=1;
q[1]=1;
while(p<=u)
{
x=q[p];
++p;
for(i=1;i<=d;++i)
if(c[x][i]>fl[x][i]&&viz[i]!=cur)
{
viz[i]=cur;
t[i]=x;
if(i==d)
return ;
++u;
q[u]=i;
}
}
}
int main ()
{
f>>n;
for(i=1;i<=n;++i)
{
f>>x>>y;
sol+=x;
c[1][i+1]=x;
c[i+n+1][2*n+2]=y;
}
d=2*n+2;
for(i=2;i<=n+1;++i)
for(j=n+2;j<d;++j)
if(i!=j-n)
c[i][j]=1;
cur=1;
while(viz[d]!=cur)
{
fluxm=INF;
bfs();
if(viz[d]!=cur)
break;
x=d;
while(x!=1)
{
fluxm=min(fluxm,c[t[x]][x]-fl[t[x]][x]);
x=t[x];
}
x=d;
while(x!=1)
{
fl[t[x]][x]+=fluxm;
fl[x][t[x]]-=fluxm;
x=t[x];
}
++cur;
}
g<<sol<<'\n';
for(i=2;i<=n+1;++i)
for(j=n+2;j<d;++j)
if(fl[i][j])
g<<i-1<<' '<<j-n-1<<'\n';
}