BZOJ1086 SCOI2005 王室聯邦

2022-05-08 07:48:12 字數 2126 閱讀 9554

「餘」人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成

員來管理。他的國家有n個城市,編號為1..n。一些城市之間有道路相連,任意兩個不同的城市之間有且僅有一條

直接或間接的道路。為了防止管理太過分散,每個省至少要有b個城市,為了能有效的管理,每個省最多只有3b個

城市。每個省必須有乙個省會,這個省會可以位於省內,也可以在該省外。但是該省的任意乙個城市到達省會所經

過的道路上的城市(除了最後乙個城市,即該省省會)都必須屬於該省。乙個城市可以作為多個省的省會。聰明的

你快幫幫這個國王吧!

第一行包含兩個數n,b(1<=n<=1000, 1 <= b <= n)。接下來n-1行,每行描述一條邊,包含兩個數,即這

條邊連線的兩個城市的編號。

如果無法滿足國王的要求,輸出0。否則輸出數k,表示你給出的劃分方案中省的個數,編號為1..k。第二行輸

出n個數,第i個數表示編號為i的城市屬於的省的編號,第三行輸出k個數,表示這k個省的省會的城市編號,如果

有多種方案,你可以輸出任意一種。

8 2

1 2

2 3

1 8

8 7

8 6

4 6

6 5

3 2 1 1 3 3 3 3 2

2 1 8

正解:樹上分塊

解題報告:

這道題只需要隨意輸出一組方案就可以了,似乎可以亂搞。。。

考慮樹上分塊,每當掃到發現子樹結點已經不小於b了,那麼考慮把他們直接劃成乙個省,並且以當前根結點為省會即可。

並且把子樹中所有結點劃到乙個塊中,用棧維護一下就可以了。那麼最後會剩下一些結點,隨便丟哪個塊都是可以的,只要發現路上有乙個點已經被劃成某個塊中,那麼把接下來的子樹中的點也都劃成這個塊即可,這樣才能保證題目要求。

1

//it is made by jump~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include

13#ifdef win32

14#define ot "%i64d"

15#else

16#define ot "%lld"

17#endif

18using

namespace

std;

19 typedef long

long

ll;20

const

int maxn = 1011;21

int first[maxn],to[maxn*2],next[maxn*2

],size[maxn];

22int

n,k,ecnt,b,cnt;

23int

que[maxn],top;

24int

cap[maxn];

25int

belong[maxn];

2627 inline int

getint()

2836

37 inline void dfs(int x,int

fa)else size[x]+=size[v];48}

49 size[x]++;50}

5152 inline void paint(int x,int fa,int col)58}

5960 inline void

work()

67 dfs(1,0

);68

if(!k) cap[++k]=1

;69 paint(x,0

,k);

70 printf("

%d\n

",k);

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

%d ",belong[i]);printf("\n"

);72

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

%d "

,cap[i]);73}

7475

intmain()

76

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。一些城市之間有道路相連,任意兩個不同的...