BZOJ3712 Fiolki(並查集重構樹)

2022-03-20 05:07:49 字數 994 閱讀 3147

bzoj

很神仙的題目。

我們發現所有的合併關係構成了一棵樹。

那麼兩種不同的東西如果產生反應,一定在兩個聯通塊恰好聯通的時候反應。

那麼,我們按照並查集的合併順序,類似於克魯斯卡爾重構樹的方法構建乙個並查集重構樹,

發現所有的反應恰好在兩者的\(lca\)處發生,

所以把所有可以發生的翻譯拿出來,

按照\(lca\)的深度為第一關鍵字,反應的優先順序為第二關鍵字排序。

然後按順序依次計算答案就好了。

#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

#define max 500500

inline int read()

ll ans;

int n,m,g[max],k;

struct linee[max];

int h[max],cnt=1;

inline void add(int u,int v);h[u]=cnt++;}

int size[max],hson[max],top[max],fa[max],dep[max];

void dfs1(int u,int ff)

}void dfs2(int u,int tp)

int lca(int u,int v)

int getf(int x)

int main()

for(int i=n+m;i;--i)if(!dep[i])dfs1(i,0),dfs2(i,i);

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

; }sort(&p[1],&p[tot+1]);

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

printf("%lld\n",ans+ans);

}

bzoj 2178 圓的面積並

給出n個圓,求其面積並 先給乙個數字n n 1000 接下來是n行是圓的圓心,半徑,其絕對值均為小於1000的整數 面積並,保留三位小數 自適應辛普森。留個模板好了 include include include include includeusing namespace std const do...

bzoj 1116(構造 並查集)

time limit 10 sec memory limit 162 mb submit 801 solved 440 submit status discuss byteotia城市有n個 towns m條雙向roads.每條 road 連線 兩個不同的 towns 沒有重複的road.你要把其中...

BZOJ 2178 圓的面積並

description 給出n個圓,求其面積並 題目分析 simpson積分模板題。其實程式有bug,懶得寫了。其實就是不斷的二分,到乙個較小值的時候,就可以了。include include include define f i,j,n for int i j i n i define d i,j...