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