考試又 叒叕出鍋了

2022-08-20 00:33:11 字數 2727 閱讀 9318

小遲修馬路

road.in/.out/.cpp

【問題描述】

⼩小遲生活的城市是1棵樹(樹指的是乙個含有 n 個節點以及 n-1 條邊的無向連通圖),節點編號從 1 到 n,每條邊擁有乙個權值 value,表示通過這條邊的時候你需要交納的金錢(注意,有可能這個值為負數,也就是說你經過這條邊的時候你可以賺錢)小遲是乙個傑出的馬路工,他居住在節點 s,他能夠選擇任意乙個節點m,並將從節點 s 到節點 m 的簡單路徑(簡單路徑指的是不經過同乙個節點兩次)上的所有邊的權值都修改為 0.現在小遲獲得 q 個請求,每個請求都是以 a b 的形式給出,表示小遲的好朋友小早希望從節點 a 走簡單路徑到節點 b,小遲希望能最小化小早需要繳納的錢。

需要注意的是,小遲獲得的這 q 個請求是相互獨立的,也就是說您只需要對於每乙個請求,決定小遲的乙個修路方案,使得小早需要繳納的錢盡可能的少。

【輸入格式】

輸入檔名為 road.in。

第一行三個正整數為 n,q,s。

接下來 n-1 行,每行三個整數 x y z, 表示有一條邊 (x,y),value 為 z。

接下來 q 行,每個兩個正整數 a b,表示請求。

【輸出格式】

輸出檔名為 road.out。

q 行,每行兩個整數,表示需要繳納的最少的錢。

【樣例輸入】

3 2 1

1 2 1

2 3 1

1 21 3

【樣例輸出】00

【樣例解釋】

對於第一次詢問 1 2, 小遲可以修從 1 到 2 的路,從而使得小早不需要

繳納金錢;

對於第二次詢問 1 3, 小遲可以修從 1 到 3 的路,從而使得小早不需要

繳納金錢。

【資料規模及約定】

對於 30% 的資料,n≤1000,q≤1000.

對於 100% 的資料,1≤n,q≤200000,1≤x,y≤n,|z|≤1000.

題解:lca+樹剖維護最大值。這題無根,為了方便以s為根,可以算出每個點到s的dis,然後考慮清零情況,s為x y的lca,y為lca,x為lca,x y的lca在s下方

對於第一種只能選擇清左邊或者清右邊,對於第二三種,清到最小值就行,對於第四種與第一種類似,但是最後結果要再減去dis[lca(x,y)](考試的時候減了兩倍,然後100->0)。

這是lca部分,剩下的就需要樹剖維護dis中的最大值,再用底下點的dis減去就行

**:

#include#include

#define lson k<<1,l,mid

#define rson k<<1|1,mid+1,r

#define ls k<<1

#define rs k<<1|1

#define mid ((l+r)>>1)

using

namespace

std;

const

int n=200005,inf=2e9;

intn,m,cnt,s,mi,tot;

int head[n],fa[n][23

],dis[n],dep[n];

intson[n],top[n],val[n],siz[n],id[n];

int tr[n<<2

];struct

nodee[n

<<1

];inline

intread()

while(ch>='

0'&&ch<='9')

return w*s;

}inline

void add(int

from,int to,int

dis);

head[

from]=cnt;

}void dfs(int x,int f,int

di)}

void dfs2(int x,int

topf)

}inline

int lca(int x,int

y)

return fa[x][0];}

inline

void update(int

k)void build(int k,int l,int

r) build(lson);build(rson);

update(k);

}int ask(int k,int l,int r,int x,int

y)

if(y<=mid)return

ask(lson,x,y);

else

if(x>mid)return

ask(rson,x,y);

else

return max(ask(lson,x,mid),ask(rson,mid+1

,y));

}void query(int x,int

y)

if(dep[x]>dep[y])swap(x,y);

mi=max(ask(1,1

,n,id[x],id[y]),mi);

}int

main()

dfs(s,

0,0);

dfs2(s,s);

build(

1,1,n);

intans;

while(m--)

else

if(z==x)

else

if(z==y)

else

}return0;

}

又雙叒叕換,微軟這次換Edge了

其實兩個月前跟乙個微軟的前同事聊天已經聽說過微軟要基於chromiun來開發pc版瀏覽器的,用來替換原來的edge,當時就比較震驚。今天突然看到網上有關於這類的新聞,突然感覺不得不吐槽兩句。我走之前在內部android edge專案組呆過幾個月,當時android版本的edge就是基於chromiu...

加密數字貨幣又雙叒叕跌了!

加密數字貨幣 周二普遍 其中位元幣 跌近4 在其他主要加密貨幣中,瑞波幣大跌14 以上,以太幣和現為第六大加密貨幣的stella也雙雙跌逾一成。coindesk資料顯示,位元幣 在過去24個小時裡最高觸及6581.51美元,最低觸及6334.39美元。coindesk追蹤來自於bitstamp co...

又雙叒叕搞事情?!聯想欲發布穿牆神器

近日,聯想官方微博連續發布了多條帶有炫酷海報的微博,透露了聯想將於 4 月 16 日召開一場關於智慧型物聯產品的新品發布會,然而除此之外,幾張海報上的資訊都沒有明確展示出是什麼樣的產品,這讓此次新品發布更添了乙份神秘色彩。4 月 12 日,聯想官微又發布了一張帶有wifi圖案的海報,而從這張海報上 ...