P2325 SCOI2005 王室聯邦

2022-02-27 16:36:33 字數 747 閱讀 9729

傳送門

一遍dfs,如果某個子樹的未劃分的個數大於等於\(b\),那麼就把他們單獨劃為乙個省,該點作為省會

最後把所有剩下的和\(1\)劃到乙個省就好了

//minamoto

#include#define r register

#define fp(i,a,b) for(r int i=a,i=b+1;ii;--i)

#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)

using namespace std;

char buf[1<<21],*p1=buf,*p2=buf;

inline char getc()

int read()

char sr[1<<21],z[20];int c=-1,z=0;

inline void ot()

void print(r int x,r char ch)

const int n=1005;

struct ege[n<<1];int head[n],tot;

inline void add(r int u,r int v),head[u]=tot;}

int n,m,u,v,bl[n],st[n],rt[n],cnt,top;

void dfs(int u,int fa)

}st[++top]=u;

}int main()

P2325 SCOI2005 王室聯邦

利用了樹上莫隊的分塊方式,保證每個塊的大小都 ge b且 le 3b,然後證明略過 僅敘述一下演算法的過程 使用乙個棧,依次dfs這個點的每個子樹,如果發現新增的節點數大於等於b,就分出新的一塊,最後把剩下的節點塞進最後乙個塊裡 分塊的 void dfs int u,int f s.push u i...

P2325 SCOI2005 王室聯邦 解題報告

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

SCOI2005 王室聯邦

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