BZOJ1086 SCOI2005王室聯邦

2022-03-27 07:14:15 字數 962 閱讀 6050

想學樹上莫隊結果做了個樹分塊。

看完題後想到了菊花圖的形狀認為無解,結果仔細一瞧省會可以在外省尷尬

對於每一顆子樹進行深搜,一旦遇到加在一起大小達到b則將它們並為一省,因為他子樹搜完以後沒有分出塊的大小是小於b的,而且他自己當前剩下的也是小於b的,所以可以放心和。

最後剩下的點肯定也小於b所以與最後乙個省一合即可。當前子樹根節點留給上面也是因為這個。

by:大奕哥

1 #include2

using

namespace

std;

3const

int n=1005;4

intbel[n],size[n],cap[n],head[n],num,cnt,top,s[n],n,b;

5struct

nodee[n<<1];8

void add(int x,inty)9

12void dfs(int x,int

fa)13

25else size[x]+=size[y];26}

27 size[x]++;28}

29int

main()

3035

intx,y,w;

36for(int i=1;ii)

3741 dfs(1,0

);42

while(top)bel[s[top--]]=num;

43 printf("

%d\n

",num);

44for(int i=1;i<=n;++i)printf("

%d "

,bel[i]);

45 printf("\n"

);46

for(int i=1;i<=num;++i)printf("

%d "

,cap[i]);

47return0;

48 }

bzoj1086 scoi2005 王室聯邦

題目鏈結 本來是來學樹上分塊的,沒想到正解是貪心 dfs。題意 求將樹分為幾個聯通塊,每個聯通塊大小大於b小於3b,是否可行。solution1 題都沒看就翻了題解。發現時貪心 dfs。一遍dfs即可。注意到以x為根節點時,其兒子s,則子樹s中與s相連的節點的連通塊,如果要構成乙個省,既可以s作為省...

bzoj1086 SCOI2005 王室聯邦

description 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成員來管理。他的國家有n個城市,編號為1.n。一些城市之間有道路相連,任意兩個不同的城市之間有且僅有一條直接或間接的道路。為了防止管理太過分散,每個省至少要有b個城市,為了能有效的管理...

BZOJ 1086 SCOI2005 王室聯邦

啊啊啊啊啊啊啊啊啊啊啊啊 又是一道赤果果的水水模板題 沒辦法啊我太弱了。好吧 這是一道樹分塊 原題戳對其實你們依然不用戳 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成 員來管理。他的國家有n個城市,編號為1.n。一些城市之間有道路相連,任意兩個不同的...