n∗m
n*mn∗
m個格仔,最外層有無限高的牆,然後每個格仔之間有一睹給定高度的牆,然後求有多少種不同的水位情況。
首先我們如果將牆看成邊,那麼會造成影響的一定是在最小生成樹上的邊,那麼考慮一條邊的影響,假設左邊聯通塊牆最高為h1h1
h1,右邊為h2h2
h2,左邊水位都不高於h1h1
h1時有a ns
1ans1
ans1
種方案,右邊水位都不高於h2h2
h2時有a ns
2ans2
ans2
中方案。該邊的高度為h
hh,那麼新聯通塊的答案為(an
s1+h
−h1)
∗(an
s2+h
−h2)
(ans1+h-h1)*(ans2+h-h2)
(ans1+
h−h1
)∗(a
ns2+
h−h2
)計算即可
#include
#include
#include
#define ll long long
#define p(x,y) ((x-1)*m+(y))
using
namespace std;
const ll n=
1e6+
10,xjq=
1e9+7;
struct nodea[n*4]
;ll n,m,h,tot,fa[n]
,ans[n]
,h[n]
;bool
cmp(node x,node y)
ll find
(ll x)
intmain()
;}for(ll i=
1;i)for
(ll j=
1;j<=m;j++);
}sort
(a+1
,a+1
+tot,cmp)
;for
(ll i=
1;i<=tot;i++)}
printf
("%lld"
,(ans[
find(1
)]+h-h[
find(1
)])%xjq)
;}
P3366 模板 最小生成樹
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...
P3366 模板 最小生成樹
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...
P3366 模板 最小生成樹
題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...