離線 帶權並查集 hdoj3938 Portal

2021-08-01 06:46:48 字數 1031 閱讀 6342

題目傳送門:

題目的題意有些不清楚,看了discuss才明白。定義圖上一條路徑的cost為路徑中所有邊權中最大的那個。對於給定的圖,回答當最大的路徑長度為l的時候,最多可以有多少頂點對是可及的。

按照kruskal的思路,按邊權從小到大連線頂點,每次相連,如果減少乙個連通分量,那麼可及頂點對就會增大,增大的個數就是原來兩個連通分量頂點個數的乘積,不斷累加就可以得到對於不同的l,一共有多少頂點對。

#include 

#include

#include

#include

using namespace std;

const int m = 5e4 + 5;

const int n = 1e4 + 5;

int father[n], sum[n], ans[n];

int n, m, t;

struct edge e[m];

struct query q[n];

bool cmp(const edge &e1, const edge &e2)

bool cmp1(const query &q1, const query &q2)

int find(int

x) returnx;}

int merge(int

x, int

y) else

return0;}

void init(void)

}int main()

sort(e + 1, e + 1 + m, cmp);

for (int i = 1; i <= t; i ++)

sort(q + 1, q + 1 + t, cmp1);

int cnt = 0, j = 1;

for (int i = 1; i <= t; i ++)

ans[q[i].id] = cnt;

}for (int i = 1; i <= t; i ++)

}return

0;}

HDOJ 3938 Portal 離線並查集

給出乙個帶邊權的圖,令兩個點之間的路徑的費用為中途經過的邊的最大值,對每個查詢求有多少對點路徑費用小於等於給定的l。用類似kruskal的思想,每個點都設定乙個sum陣列表示它所相連的所有滿足小於當前l的邊相連的點有多少個 其實陣列名用size更合適 然後對於每次查詢l,因為邊我們也是公升序排序的,...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

帶權並查集

食物鏈 time limit 1000ms memory limit 10000k total submissions 71395 accepted 21146 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...