[bzoj1086][SCOI2005]王室联邦
来自FallDream的博客,未经允许,请勿转载,谢谢
余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理。他的国家有n个城市,编号为1..n。一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条 直接或间接的道路。为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个 城市。每个省必须有一个省会,这个省会可以位于省内,也可以在该省外。但是该省的任意一个城市到达省会所经 过的道路上的城市(除了最后一个城市,即该省省会)都必须属于该省。一个城市可以作为多个省的省会。聪明的 你快帮帮这个国王吧!1<=N<=1000, 1 <= B <= N
很有意思的题...大体就是直接dfs,在每次dfs的时候都处理一下子树的信息,把子树传回来的点加入一个栈里面,一满B个就划分一下,并且传回最后剩下的点。这样传回去的点不超过B-1个,每一次划分的不超过2B-2个,所以把根返回的直接塞进最后一个省里面就行了。
然后这道题貌似没有无解..
#include<iostream> #include<cstdio> #include<cstring> #define MN 1000 using namespace std; inline int read() {int x = 0 , f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f; }int q[MN+5][MN+5],bel[MN+5],cap[MN+5],head[MN+5]; int b,n,tot=0,cnt=0,num,top[MN+5]; struct edge{int to,next;}e[MN*2+5];void ins(int f,int t) {e[++cnt]=(edge){t,head[f]};head[f]=cnt;e[++cnt]=(edge){f,head[t]};head[t]=cnt; }int dfs(int x,int fa) {top[x]=0;for(int i=head[x];i;i=e[i].next)if(e[i].to!=fa){dfs(e[i].to,x);if(top[x]>=b){++tot;cap[tot]=x;for(int j=1;j<=top[x];j++) bel[q[x][j]]=tot;top[x]=0;}}q[x][++top[x]]=x;for(int i=1;i<=top[x];i++) q[fa][++top[fa]]=q[x][i]; }int main() {n=read();b=read();for(int i=1;i<n;i++) ins(read(),read()); dfs(1,0);//if(!tot&&top[0]) return 0*puts("0");for(int i=1;i<=top[0];i++) bel[q[0][i]]=tot;printf("%d\n",tot);for(int i=1;i<=n;i++) printf("%d ",bel[i]); puts("");for(int i=1;i<=tot;i++) printf("%d ",cap[i]);return 0; }
转载于:https://www.cnblogs.com/FallDream/p/bzoj1086.html
[bzoj1086][SCOI2005]王室联邦相关推荐
- BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
题目 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两 ...
- bzoj1086[SCOI2005]王室联邦
传送门 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些 ...
- 【BZOJ1086】[SCOI2005]王室联邦 树分块
[BZOJ1086][SCOI2005]王室联邦 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. ...
- [SCOI2005]王室联邦
[SCOI2005]王室联邦 类似树分块 >=B,并且<=3B 直接dfs,用一个全局栈记录未规定省份的元素 dfs(y)上来,如果栈内元素>=B,就弹出来变成一个省,并且省会是x( ...
- BZOJ 1086: [SCOI2005]王室联邦( )
其实合法方案一定存在....(B <= N), 构造答案就可以了...然而我是看题解才会的..... ---------------------------------------------- ...
- 1086: [SCOI2005]王室联邦
(大概 打了5天比赛 学习计划 树上莫队一直都没来得及学 今天做了第一道树上分块的题 写挂了5,6次 许多细节没有注意到 慢慢改才发现 orz 继续加油 1086: [SCOI2005]王室 ...
- bzoj 1086: [SCOI2005]王室联邦(DFS)
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 2100 Solved ...
- BZOJ1086:[SCOI2005]王室联邦——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1086 题面源于洛谷. 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国 ...
- bzoj 1086: [SCOI2005]王室联邦
Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有 ...
最新文章
- 用Tcl定制Vivado设计实现流程
- pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)...
- 【uni-app】rich-text 无法处理 video 的解决办法
- Eclipse中java文件编码格式修改
- 无限重启_三星蓝光播放器出现无限自动重启BUG,涉及不少用户及不同型号
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- kettle优化抽取数据速度_基于kettle工具提高表输出写入速度(每秒万条记录)
- 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
- Failed to execute goal org.apache.maven.plugins:ma
- 【376天】每日项目总结系列113(2018.02.16)
- PAIP.FLEX与JAVA数据对应关系.txt
- rootkit的检测
- 为什么刚度阵对称?根本原因在于物理方程。知识点:矩阵微积分,物理方程
- 名编辑电子杂志大师教程 | PDF制作排版设计建议
- Visual Studio 2022 WinForm/Wpf打包安装程序
- micrium ucprobe使用指南
- 解决the application was unable to start correctly(0x000007b)与 缺少VCRUNTIME140.dll
- 计算机限制无线网络,无线网络连接受限制怎么办 无线网络连接受限解决方法【图文】...
- wmp 11安装方法
- 冷战——婚姻生活的双刃剑