codevs1947 道路修建 搜尋 樹p

2022-08-24 05:00:23 字數 1224 閱讀 3711

不明白為啥一定有乙個點re,而同樣的c++用int就能跑過(吃屎了有木有)

此刻我內心是崩潰的= =

而且在bz和code上,兩個程式跑出來的結果也是不一樣的,乙個re乙個a了

先發乙個95分的吧,到時候我再查一下

var

pre,last,other,long:

array[0..2002333] of

qword;

k,l,n,tot,x,y,z:qword;

ans,d:qword;

i,j:longint;

procedure

add(x,y,z:qword);

begin

inc(tot);

pre[tot]:=last[x];

last[x]:=tot;

other[tot]:=y;

long[tot]:=z;

end;

function

dfs(x,p:qword):qword;

vart,i,v,size:qword;

begin

i:=1

; v:=1

; size:=1

; i:=last[x];

while i<>0

dobegin

v:=other[i];

if v=p then

begin i:=pre[i]; continue; end

; t:=dfs(v,x);

inc(size,t);

if n>2*t then d:=n-2*t else d:=2*t-n;

inc(ans,d*long[i]);

i:=pre[i];

end;

dfs:=size;

end;

begin

readln(j);

for i:=1

to j-1

dobegin

readln(x,y,z);

add(x,y,z);

add(y,x,z);

end;

n:=j;

dfs(

1,0);

writeln(ans);

end.

JZOJ 1244 修建道路 最小生成樹

傳送門 給出n nn個點和已經建好的m mm條邊,求我們需要修建的最小代價使得n nn個點可以互相到達 正常最小生成樹隨便跑,對於已經修好的邊就直接在開始就放在乙個塊裡 include include include include include include include include d...

Tyvj4878 道路修建(環套樹 單調佇列)

題面 題意 給你3000棵環套樹,邊長都為1,問兩個點的最短距離的最大值。根據環套樹的套路,先把環找出來,然後dfs每棵外向樹。對於每個點,記錄l1為該點向下最長鏈的深度,l2為為該點向下次長鏈的深度,l1 l2就可能成為答案。這樣就處理了路徑在每棵樹上的情況。我們考慮路徑跨越了環的情況。想到在吃雞...

SDOI2015 道路修建(線段樹維護連通性)

這道題可以看做是 shoi2008 堵塞的交通的加強版,由於形同模擬不同人的寫法差別很大,強烈建議理解了原理之後自己獨立寫 給乙個 2 m 的網格圖,每次操作支援修改一條邊的權值,和查詢 l,r 含 的最小生成樹 如果做過上面那道題就很容易知道這道題是考 毒瘤的 線段樹 只需要維護8個標記 因寫法而...