澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去……
澤澤來到了足球王國——巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。
突然,澤澤被乙個人拎了起來,一看,是個足球流氓。他後面跟了一大群足球流氓,正虎視眈眈地看他。他們要求和澤澤比賽,輸了就要揍他。
沒辦法,澤澤硬著頭皮和足球流氓另外擄來的幾個人一起組建了乙隻隊伍,和足球流氓隊比賽。
比賽開始,澤澤隊率先發球。澤澤觀察了四周,想怎麼才能用最短的時間射門呢?
射門的時間為距離*2,而傳球的時間是距離*1。所以澤澤想找一條用時最少的射門路徑,來打敗足球流氓。
足球流氓當然不會袖手旁觀,他們會攔截。當澤澤隊伍中的傳球人、被傳球人之間有某足球流氓並且他們在同一直線上時,傳球不會成功,即不能這樣傳球。比如a(1,2)想傳球給b(7,8),中間有個足球流氓c(3,4),則他們在同一直線,傳球不成功。射門不受足球流氓影響。
第1行3個整數x0,y0,n,m。x0,y0表示球門的座標,n表示澤澤隊伍有幾個人,m表示足球流氓有幾個人。
接下來的n行,分別有2個整數,表示澤澤球隊的球員座標。其中最前面的2個整數是澤澤的座標。球一開始在澤澤腳下。
接下來的m行,分別有2個整數,表示足球流氓的球員座標。
保證不會有2個人座標相同。
輸出乙個整數,是最短時間四捨五入取整後的結果。
用計算幾何算出哪些邊是可以連的
再用spfa就好了
const
maxe=300000;
maxv=10000000;
type
arr=record
x,y,next:longint;
w:real;
end;
var n,m,s,q:longint;
ls:array[0..maxe] of longint;
edge:array[0..maxe,1..2] of longint;
a:array[0..maxv] of arr;
f:array[0..maxe] of real;
v:array[0..maxe] of longint;
d:array[0..maxe] of longint;
i,j,k:longint;
ans:longint;
x1,x2:longint;
y1,y2:longint;
procedure spfa;
var i,j,k:longint;
head,tail:longint;
begin
fillchar(f,sizeof(f),$7f);
head:=0;
tail:=1;
v[s]:=1;
d[1]:=s;
f[s]:=0;
repeat
head:=head+1;
j:=ls[d[head]];
while j<>0
do begin
with a[j] do
begin
if f[x]+wy]
then
begin
f[y]:=f[x]+w;
if v[y]=0
then
begin
tail:=tail+1;
d[tail]:=y;
v[y]:=1;
end;
end;
j:=next;
end;
end;
v[d[head]]:=0;
until head=tail;
end;
function pan(x1,y1,x2,y2,x3,y3:int64):boolean;
begin
if (x1-x3)*(y2-y3)-(x2-x3)*(y1-y3)<>0
then exit(true);
if (sqrt(s
qr(x1-x2)+s
qr(y1-y2))qr(x1-x3)+s
qr(y1-y3)))or(sqrt(s
qr(x1-x2)+s
qr(y1-y2))qr(x2-x3)+s
qr(y2-y3)))
then exit(true);
exit(false);
end;
procedure add(x,y:longint;w:real);
begin
q:=q+1;
a[q].x:=x;
a[q].y:=y;
a[q].w:=w;
a[q].next:=ls[x];
ls[x]:=q;
end;
begin
assign(input,'brazil.in');
assign(output,'brazil.out');
rewrite(output);
reset(input);
readln(edge[0,1],edge[0,2],n,m);
q:=0;
fillchar(ls,sizeof(ls),0);
for i:=1 to n do
readln(edge[i,1],edge[i,2]);
for i:=n+1 to m+n do
readln(edge[i,1],edge[i,2]);
for i:=1 to n do
begin
for j:=i+1 to n do
for k:=n+1 to m+n do
if pan(edge[i,1],edge[i,2],edge[j,1],edge[j,2],edge[k,1],edge[k,2])
then
begin
writeln(i);
x1:=edge[i,1]; y1:=edge[i,2];
x2:=edge[j,1]; y2:=edge[j,2];
add(i,j,sqrt(s
qr(x1-x2)+s
qr(y1-y2)));
add(j,i,sqrt(s
qr(x1-x2)+s
qr(y1-y2)));
break;
end;
end;
for i:=1 to n do
begin
x1:=edge[i,1]; y1:=edge[i,2];
x2:=edge[0,1]; y2:=edge[0,2];
add(i,0,sqrt(s
qr(x1-x2)+s
qr(y1-y2))*2);
add(0,i,sqrt(s
qr(x1-x2)+s
qr(y1-y2))*2);
end;
s:=1;
spfa;
write(f[0]:0:0);
close(input);
close(output);
end.
SSL 1579 澤澤在巴西
description 澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去 澤澤來到了足球王國 巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。突然,澤澤被乙...
SSL1579 澤澤在巴西 spfa
澤澤在巴西 time limit 10000ms memory limit 65536k total submit 81 accepted 29 case time limit 1000ms description 澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告...
澤澤在巴西 ssl1579 最短路
澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去 澤澤來到了足球王國 巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。突然,澤澤被乙個人拎了起來,一看,是個...