澤澤在巴西

2021-07-24 04:29:51 字數 3550 閱讀 6355

澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去……

澤澤來到了足球王國——巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。

突然,澤澤被乙個人拎了起來,一看,是個足球流氓。他後面跟了一大群足球流氓,正虎視眈眈地看他。他們要求和澤澤比賽,輸了就要揍他。

沒辦法,澤澤硬著頭皮和足球流氓另外擄來的幾個人一起組建了乙隻隊伍,和足球流氓隊比賽。

比賽開始,澤澤隊率先發球。澤澤觀察了四周,想怎麼才能用最短的時間射門呢?

射門的時間為距離*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 最短路

澤澤幫助了英國某街道儘量減少酸雨的傷害,街道辦主任非常感激他,就把他領到一扇門前,告訴他這扇門能通往好地方,具體好到什麼程度要看澤澤人品。澤澤毫不猶豫地走了進去 澤澤來到了足球王國 巴西。這可是個好地方,澤澤看來人品攢了不少了。這裡大街小巷都在踢足球,其樂無窮。突然,澤澤被乙個人拎了起來,一看,是個...