[题解]bzoj1086 SCOI2005王室联邦
2017-08-11 23:02
253 查看
Description
“余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理。他的国家有n个城市,编号为1..n。一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条
直接或间接的道路。为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个
城市。每个省必须有一个省会,这个省会可以位于省内,也可以在该省外。但是该省的任意一个城市到达省会所经
过的道路上的城市(除了最后一个城市,即该省省会)都必须属于该省。一个城市可以作为多个省的省会。聪明的
你快帮帮这个国王吧!
Input
第一行包含两个数N,B(1<=N<=1000, 1 <= B <= N)。接下来N-1行,每行描述一条边,包含两个数,即这条边连接的两个城市的编号。
Output
如果无法满足国王的要求,输出0。否则输出数K,表示你给出的划分方案中省的个数,编号为1..K。第二行输出N个数,第I个数表示编号为I的城市属于的省的编号,第三行输出K个数,表示这K个省的省会的城市编号,如果
有多种方案,你可以输出任意一种。
Sample Input
8 21 2
2 3
1 8
8 7
8 6
4 6
6 5
Sample Output
32 1 1 3 3 3 3 2
2 1 8
Solution
王室联邦分块大法好!%%%PoPoQQQ代码:
#include<cstdio> #include<algorithm> using namespace std; template<typename T>inline void read(T &x){ T f=1;char ch=getchar(); for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1; for(x=0;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0'; x*=f; } const int maxn=1010; struct edge{ int to,nxt; }e[maxn<<1]; int n,B,num,sta[maxn],top,bel[maxn]; int head[maxn],pro[maxn]; void add(int u,int v){ e[++num].to=v;e[num].nxt=head[u];head[u]=num; e[++num].to=u;e[num].nxt=head[v];head[v]=num; } void Dfs(int x,int fa){ int bot=top; for(int i=head[x];i;i=e[i].nxt){ if(e[i].to==fa)continue; Dfs(e[i].to,x); if(top-bot>=B){ pro[++pro[0]]=x; while(top>bot) bel[sta[top--]]=pro[0]; } } sta[++top]=x; } int main(){ read(n);read(B); for(int i=1,u,v;i<n;i++){ read(u);read(v); add(u,v); } Dfs(1,0); while(top)bel[sta[top--]]=pro[0]; printf("%d\n",pro[0]); for(int i=1;i<=n;i++)printf("%d ",bel[i]); putchar(10); for(int i=1;i<=pro[0];i++)printf("%d ",pro[i]); putchar(10); return 0; }
相关文章推荐
- [bzoj1086][SCOI2005]王室联邦 dfs
- [BZOJ1086][SCOI2005]王室联邦(树上分块)
- bzoj 1086: [SCOI2005]王室联邦(树上分块)
- BZOJ 1086: [SCOI2005]王室联邦 树分块
- [bzoj 1086--SCOI2005]王室联邦
- BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
- BZOJ 1086 [SCOI2005]王室联邦 (树上分块)
- BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
- BZOJ 1086: [SCOI2005]王室联邦 [树上分块]
- bzoj 1086: [SCOI2005]王室联邦
- 【BZOJ】【1086】 【SCOI2005】王室联邦
- BZOJ1086 [SCOI2005]王室联邦 解题报告【数据结构(?)】【树分块】【DFS】
- [BZOJ]1086: [SCOI2005]王室联邦
- 【BZOJ】1086: [SCOI2005]王室联邦
- bzoj 1086: [SCOI2005]王室联邦(DFS)
- [BZOJ1086][SCOI2005]王室联邦
- 【BZOJ】【P1086】【SCOI2005】【王室联邦】【题解】【dfs】
- BZOJ 1086 SCOI2005 王室联邦 块状树
- Bzoj 1086: [SCOI2005]王室联邦
- BZOJ 1086([SCOI2005]王室联邦-树的划分)