比赛 |
20110723 |
评测结果 |
EEEEEE |
题目名称 |
圣诞节 |
最终得分 |
0 |
用户昵称 |
reamb |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2011-07-23 12:52:47 |
显示代码纯文本
program shengdanjie;
var
gg,g,cost:array[0..1002,0..1002]of longint;
a:array[1..300000]of longint;
d,vd:array[0..1003] of longint;
n,i,j,money,ans,p:longint;
h,age:array[0..1003]of longint;
procedure sort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div 2];
repeat
while a[i]<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
j:=j-1;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;
function min(a,b:longint):longint;
begin
if a<b then
min:=a
else
min:=b
end;
function dfs(u,flow:longint):longint;
var
z,v,tmp:longint;
begin
if u=2*n+1 then
exit(flow);
z:=0;
for v:=0 to 2*n+1 do
if (g[u,v]>0)and(d[u]=d[v]+1) then
begin
tmp:=dfs(v,min(flow-z,g[u,v]));
g[u,v]:=g[u,v]-tmp;
g[v,u]:=g[v,u]+tmp;
z:=z+tmp;
if z=flow then
exit(z)
end;
if d[0]>=2*n+2 then
exit(z);
dec(vd[d[u]]);
if vd[d[u]]=0 then
d[0]:=2*n+2;
inc(d[u]);
inc(vd[d[u]]);
exit(z)
end;
procedure erfen(x,y:longint);
var
mid,i,j,v:longint;
begin
if x=y then
money:=a[x]
else
begin
mid:=(x+y)div 2;
v:=a[mid];
for i:=1 to n do
for j:=n+1 to 2*n do
if cost[i,j]<=v then
g[i,j]:=1
else
g[i,j]:=0;
for i:=1 to n do
g[0,i]:=1;
for i:=n+1 to 2*n do
g[i,2*n+1]:=1;
fillchar(d,sizeof(d),0);
fillchar(vd,sizeof(vd),0);
vd[0]:=2*n+2;
ans:=0;
while d[0]<2*n+2 do
begin
ans:=ans+dfs(0,maxlongint)
end;
if ans=n then
erfen(x,mid)
else
erfen(mid+1,y)
end
end;
begin
assign (input,'christmas.in');
reset (input);
assign (output,'christmas.out');
rewrite (output);
readln (n);
for i:=1 to 2*n do
readln (h[i],age[i]);
for i:=1 to n do
for j:=n+1 to 2*n do
begin
inc(p);
a[p]:=sqr(h[i]-h[j])+sqr(age[i]-age[j]);
cost[i,j]:=a[p]
end;
sort(1,p);
erfen(1,p);
writeln (money);
close (input);
close (output)
end.