題目:
題解:
建n棵動態開點的權值線段樹,然後邊用並查集維護連通性,邊合併線段樹維護第k重要。
其實實現還是很簡單的。。
**:
1 #include23using
namespace
std;45
const
int maxn=300010;6
intfa[maxn],root[maxn],n,m,g[maxn],f[maxn],id;
7char ch[3];8
9struct
trtree[maxn<<3
];13
14void update(int
now)
1718
int merge(int now,int
last)
2627
int ffa(int
x)30
31void connect(int u,int
v)35
36void build(int &now,int w,int lt,int
rt)40
int mid=lt+rt>>1;41
if(w<=mid) build(tree[now].ch[0
],w,lt,mid);
42else build(tree[now].ch[1],w,mid+1
,rt);
43update(now);44}
4546
int ask(int now,int
k)51
52int
main() int
u,v,x,y,tt;
60for(int i=1;i<=m;i++) scanf("
%d%d
",&u,&v),connect(u,v);
61 scanf("
%d",&m);
62for(int i=1;i<=m;i++)
68return0;
69 }
HNOI2012 永無鄉 題解
對於每乙個點先建立乙個權值線段樹,之後並查集維護 更改連通性。不知道權值線段樹是啥的戳我 聯通就直接把祖先連起來然後合併線段樹 include include using namespace std const int n 100005 int size n 20 n,m,fa n type,q,r...
HNOI2012 永無鄉 splay合併
題目描述 永無鄉包含 n 座島,編號從 1 到 n 每座島都有自己的獨一無二的重要度,按照重要度可以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以 到達島 b 則稱島 a 和島 b 是連通的。...
luogu解題報告 HNOI2012永無鄉
啟發式合併 平衡樹 並查集 複雜度o n lg2n 還是可以過的.splay一次寫過然而後面各種跪.除錯能力捉急 估計是wc2017課前助眠 聽太多了 include using namespace std const int n 100005 struct node tree n 30 int t...