原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1086

王室联邦

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

题解

树上分块板子???

我们直接dfsdfsdfs到叶子节点,在回溯时将点加入栈里。这样,栈里储存的就是当前子树里的一些点,满足了题目要求。当某个点在栈里的后面点超过BB<script type="math/tex" id="MathJax-Element-131">B</script>时,直接弹出、染色,省会就是当前点。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=1005;
vector<int>mmp[M];
int n,p,sta[M],top,col[M],cap[M],cot;
void in()
{int a,b;scanf("%d%d",&n,&p);for(int i=1;i<n;++i)scanf("%d%d",&a,&b),mmp[a].push_back(b),mmp[b].push_back(a);
}
void dfs(int v,int f)
{int tmp=top,to;for(int i=mmp[v].size()-1;i>=0;--i){to=mmp[v][i];if(to==f)continue;dfs(to,v);if(top-tmp>=p){cap[++cot]=v;while(top!=tmp)col[sta[top--]]=cot;}}sta[++top]=v;
}
void ac()
{dfs(1,0);while(top)col[sta[top--]]=cot;printf("%d\n",cot);for(int i=1;i<=n;++i)printf("%d ",col[i]);putchar(10);for(int i=1;i<=cot;++i)printf("%d ",cap[i]);
}
int main()
{in();ac();return 0;
}

BZOJ1086[SCOI2005] 王室联邦相关推荐

  1. [bzoj1086][SCOI2005]王室联邦

    来自FallDream的博客,未经允许,请勿转载,谢谢 余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1 ...

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

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

  3. bzoj1086[SCOI2005]王室联邦

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

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

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

  5. [SCOI2005]王室联邦

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

  6. BZOJ 1086: [SCOI2005]王室联邦( )

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

  7. 1086: [SCOI2005]王室联邦

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

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

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

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

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

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

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

最新文章

  1. 张正友平面标定法的一些注意事项
  2. 近万个Python开源项目中精选Top34!
  3. php+mysql 注入基本过程
  4. 如何让整个表格高度固定_财务预算太费精力?多亏了这73张财务预算表格模板,让你算量快又准!直接用...
  5. 第二章:方法区和运行时常量池溢出
  6. Java实现冒泡排序动画展示
  7. 库克:5G iPhone目前还不是我们考虑的问题
  8. curl基于URL的文件传输工具
  9. 金融理财软件测试项目,大学生创新创业大赛金融理财项目创业计划书18-23-879(15页)-原创力文档...
  10. 如何拼局域网所有ip_如何查看局域网内所有ip?
  11. depot_tools下载
  12. 通过V90PN通讯故障实例来看线路干扰与线路错误的区别
  13. 《失业的程序员》(十五):商业头脑
  14. P3287 [SCOI2014]方伯伯的玉米田
  15. 大曝光!武汉最牛的互联网公司全在这了
  16. 苹果应用分身_你喜欢用苹果手机拍照!不学会这4个功能,怪不得拍不出好照片...
  17. “笨办法”学Python3,Zed A. Shaw, 习题4~5
  18. oracle撤销段的功能,oracle撤销表空间和回滚段
  19. SIM800C PCB布局
  20. 差分时钟信号的使用与引脚绑定(ucf)

热门文章

  1. wifipumpkin3 WiFi钓鱼工具
  2. JDK11使用HSDB
  3. linux 输入法框架xim,基于XIM协议的输入法原理与实现
  4. php局部缓存,Smarty局部缓存的几种方法简介_php实例
  5. 如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
  6. Javascript--闭包
  7. 打开struts-config.xml 报错 解决方法Could not open the editor
  8. C# 寻找数组中的最大子数组
  9. 科学计算matlab尔雅答案,科学计算与MATLAB语言2019尔雅答案
  10. java向注册表单传递数据php_form表单传递数组数据、php脚本接收的实例