P2325 SCOI2005 王室聯邦

2022-05-01 20:51:07 字數 786 閱讀 6037

利用了樹上莫隊的分塊方式,保證每個塊的大小都\(\ge\)b且$\le$3b,然後證明略過

僅敘述一下演算法的過程

使用乙個棧,依次dfs這個點的每個子樹,如果發現新增的節點數大於等於b,就分出新的一塊,

最後把剩下的節點塞進最後乙個塊裡

分塊的**

void dfs(int u,int f)}}

s.push(u);

}

#include #include #include #include using namespace std;

stacks;

int v[5000],fir[5000],nxt[5000],cnt,b,n,core[5000],block_cnt=0,belong[5000];

void addedge(int ui,int vi)

void dfs(int u,int f)}}

s.push(u);

}int main()

dfs(1,0);

while(!s.empty())

printf("%d\n",block_cnt);

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

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

printf("\n");

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

printf("%d ",core[i]);

printf("\n");

return 0;

}

P2325 SCOI2005 王室聯邦

傳送門 一遍dfs,如果某個子樹的未劃分的個數大於等於 b 那麼就把他們單獨劃為乙個省,該點作為省會 最後把所有剩下的和 1 劃到乙個省就好了 minamoto include define r register define fp i,a,b for r int i a,i b 1 ii i de...

P2325 SCOI2005 王室聯邦 解題報告

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

SCOI2005 王室聯邦

這一篇類似是強聯通的東東大家參考一下吧,我也不會講這題。大家可以傳送去我同學那裡看看的qaq傳送門 提交傳送門 題目描述 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成員來管理。他的國家有n個城市,編號為1.n。一些城市之間有道路相連,任意兩個不同的城...