其实合法方案一定存在....(B <= N), 构造答案就可以了...然而我是看题解才会的.....

-----------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 1009;
int N, B, Id[maxn], V[maxn], n;
int stk[maxn], Top;
struct edge {
int to;
edge* next;
} E[maxn << 1], *pt = E, *head[maxn];
inline void AddEdge(int u, int v) {
pt->to = v;
pt->next = head[u];
head[u] = pt++;
}
void Init() {
scanf("%d%d", &N, &B);
for(int i = 1; i < N; i++) {
int u, v;
scanf("%d%d", &u, &v);
u--, v--;
AddEdge(u, v);
AddEdge(v, u);
}
Top = n = 0;
}
void DFS(int x, int fa = -1) {
int t = Top;
for(edge* e = head[x]; e; e = e->next) if(e->to != fa) {
DFS(e->to, x);
if(Top - t >= B) {
V[++n] = x;
for(; Top > t; Top--)
Id[stk[Top]] = n;
}
}
stk[++Top] = x;
}
int main() {
Init();
DFS(0);
for(; Top--; Id[stk[Top]] = n);
printf("%d\n", n);
for(int i = 0; i < N; i++)
printf("%d ", Id[i]);
puts("");
for(int i = 1; i <= n; i++)
printf("%d ", ++V[i]);
puts("");
return 0;
}

-----------------------------------------------------------------------

1086: [SCOI2005]王室联邦

Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge
Submit: 938  Solved: 539
[Submit][Status][Discuss]

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 2
1 2
2 3
1 8
8 7
8 6
4 6
6 5

Sample Output

3
2 1 1 3 3 3 3 2
2 1 8

HINT

Source

转载于:https://www.cnblogs.com/JSZX11556/p/5125459.html

BZOJ 1086: [SCOI2005]王室联邦( )相关推荐

  1. bzoj 1086: [SCOI2005]王室联邦(DFS)

    1086: [SCOI2005]王室联邦 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 2100  Solved ...

  2. bzoj 1086: [SCOI2005]王室联邦

    Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有 ...

  3. BZOJ 1086 [SCOI2005]王室联邦(树分块)

    题意:中文题,略 思路:秦皇岛前就一直想学,后来没怎么想通,就算了.现在雅不是很懂,一直似懂非懂的,对于树分块的种类,有位聚聚已经整理好了(传送门),其他的就是直接搜索分块 代码: #include ...

  4. 1086: [SCOI2005]王室联邦

    (大概 打了5天比赛   学习计划 树上莫队一直都没来得及学 今天做了第一道树上分块的题  写挂了5,6次  许多细节没有注意到  慢慢改才发现 orz 继续加油 1086: [SCOI2005]王室 ...

  5. [SCOI2005]王室联邦

    [SCOI2005]王室联邦 类似树分块 >=B,并且<=3B 直接dfs,用一个全局栈记录未规定省份的元素 dfs(y)上来,如果栈内元素>=B,就弹出来变成一个省,并且省会是x( ...

  6. 【BZOJ1086】[SCOI2005]王室联邦 树分块

    [BZOJ1086][SCOI2005]王室联邦 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. ...

  7. BZOJ1086:[SCOI2005]王室联邦——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1086 题面源于洛谷. 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国 ...

  8. BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】

    题目 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两 ...

  9. bzoj1086[SCOI2005]王室联邦

    传送门 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些 ...

最新文章

  1. mac下找不到.m2文件解决方法
  2. 【Git 第2课】 GitHub是什么?
  3. 安装多个版本JDK相关问题
  4. 【推荐】由浅入深学FI—获利能力分析
  5. Plasma链0x1的构造
  6. JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
  7. 数据更新播报php程序,使用thinkPHP实现数据更新一例【原创】
  8. 突然决定!自掏腰包送Intel酷睿12代CPU!还有机械键盘、固态硬盘。
  9. mysql5.6 主从配置_CentOS7+mysql5.6配置主从
  10. c++ 常用字符串封装函数
  11. 手机运行内存6G,可是开机一会就变成2个多G了,为什么?
  12. webservice和restful的区别
  13. php 是否支持json,php json 支持汉语
  14. WIFI密码破解与网络数据抓包
  15. python学生成绩表_通过excel表格分析学生成绩
  16. 解决explorer.exe 应用程序错误,内存不能为 read或written的解决方法小结
  17. 工欲善其事,必先利其器-程序员工具推荐
  18. 关于cmake与make
  19. 关于Java单例模式的思考
  20. 最新全国机场名(持续更新2017-12-27)

热门文章

  1. 关于配置两台无线路由器
  2. php中将excel写入mysql数据库的示例
  3. 探究foreach对于迭代变量的封装性的研究
  4. STL之涉及到的算法
  5. 架构师要了解那些??
  6. c++ map 获取key列表_一日一技:举例说明python中的map()方法
  7. 月均数据_数据|| 焊接不锈钢管、卷板、棒相继被调查,出口印度的量逐年降!...
  8. python界面设计模块_Python+Pycharm+PyQT5可视化程序设计入门
  9. Spring Cloud整合Nacos实现动态配置
  10. 有关OPenCV的几个库函数的使用