bzoj 1086: [SCOI2005]王室联邦
Description
“余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理。他的国家有n个城市,编号为1..n。一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条直接或间接的道路。为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个城市。每个省必须有一个省会,这个省会可以位于省内,也可以在该省外。但是该省的任意一个城市到达省会所经过的道路上的城市(除了最后一个城市,即该省省会)都必须属于该省。一个城市可以作为多个省的省会。聪明的你快帮帮这个国王吧!
解题报告
这题是另一种分块方法,从下往上做,回溯时入栈,当子树内的栈元素达到了B,我们就新建一个块,子数内的栈中元素加入块中,因为每一个子树块\(<B\),所以弹栈时 \(<2*B\),对于最后一个多出来的块也一定 \(<B\),如果 \(>=B\) 直接新建一个块,否则和上个块合并,由于块内元素 \(<2*B\),所以加入后 \(<3*B\)
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int N=1005;
int n,B,head[N],num=0,nxt[N<<1],to[N<<1],cnt=0,st[N],top=0,fa[N],bel[N];
void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;}
void dfs(int x,int last){int u,s=top;for(int i=head[x];i;i=nxt[i]){u=to[i];if(u==last)continue;dfs(u,x);if(top-s>=B){fa[++cnt]=x;while(top!=s)bel[st[top--]]=cnt;}}st[++top]=x;
}
void work()
{int x,y;scanf("%d%d",&n,&B);for(int i=1;i<n;i++){scanf("%d%d",&x,&y);link(x,y);link(y,x);}dfs(1,1);while(top)bel[st[top--]]=cnt;printf("%d\n",cnt);for(int i=1;i<=n;i++)printf("%d ",bel[i]);puts("");for(int i=1;i<=cnt;i++)printf("%d ",fa[i]);
}int main(){work();return 0;}
转载于:https://www.cnblogs.com/Yuzao/p/7654558.html
bzoj 1086: [SCOI2005]王室联邦相关推荐
- BZOJ 1086: [SCOI2005]王室联邦( )
其实合法方案一定存在....(B <= N), 构造答案就可以了...然而我是看题解才会的..... ---------------------------------------------- ...
- bzoj 1086: [SCOI2005]王室联邦(DFS)
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 2100 Solved ...
- BZOJ 1086 [SCOI2005]王室联邦(树分块)
题意:中文题,略 思路:秦皇岛前就一直想学,后来没怎么想通,就算了.现在雅不是很懂,一直似懂非懂的,对于树分块的种类,有位聚聚已经整理好了(传送门),其他的就是直接搜索分块 代码: #include ...
- 1086: [SCOI2005]王室联邦
(大概 打了5天比赛 学习计划 树上莫队一直都没来得及学 今天做了第一道树上分块的题 写挂了5,6次 许多细节没有注意到 慢慢改才发现 orz 继续加油 1086: [SCOI2005]王室 ...
- [SCOI2005]王室联邦
[SCOI2005]王室联邦 类似树分块 >=B,并且<=3B 直接dfs,用一个全局栈记录未规定省份的元素 dfs(y)上来,如果栈内元素>=B,就弹出来变成一个省,并且省会是x( ...
- 【BZOJ1086】[SCOI2005]王室联邦 树分块
[BZOJ1086][SCOI2005]王室联邦 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. ...
- BZOJ1086:[SCOI2005]王室联邦——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1086 题面源于洛谷. 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国 ...
- BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
题目 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两 ...
- bzoj1086[SCOI2005]王室联邦
传送门 Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成 员来管理.他的国家有n个城市,编号为1..n.一些 ...
最新文章
- 拼多多成立技术顾问委员会,陆奇将领导相关工作
- 【MaxCompute】学习笔记常用查询sql
- python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目
- java 编写方法和属性,编写一个关于教师的JAVA-BEAN,要求实现其基本属性如年龄,性别等的get和set方法...
- 关于Servlet的原理以及常用类
- python zookeeper_ZooKeeper的安装以及客户端Kazoo(Python语言)的安装与使用
- 正式踏入24岁了……
- 几十行python代码构建一个前后端分离的目标检测演示网站,代码开源
- 【VMware vSAN 6.6】5.4.vSAN 配置提示:vSAN硬件服务器解决方案
- bug篇——mysql排序混乱问题
- 计算机专业新手博客,【转载】学计算机必读献给计算机专业大一新生(1)
- MXY-单点登陆系统
- linux spdbv教程,计算机化学实践基础教程
- 聚类算法-密度聚类算法DBSCAN
- 项目过程管理(五)需求文档
- cv2库中一些函数的使用
- 彷徨 | HDFS核心设计思想图
- org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest
- 【EF】对象名 'dbo.EdmMetadata' 无效。
- python闰年统计_利用Python写一个闰年计算器和每月天数计算器
热门文章
- python拟合求参_机器学习作业(四)神经网络参数的拟合——Python(numpy)实现
- php集成paypal付款流程,在PHP中集成PayPal标准支付
- win10系统优化计算机,全面优化win10电脑系统详细教程 | 专业网吧维护
- 从qspi启动linux时间,Zynq-Linux移植学习笔记(二十三)——QSPI速度配置
- java反射最佳实践,java反射性能测试分析
- 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc
- oppor17android版本,OPPOR17ColorOS系统怎么样
- linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...
- 宏定义来实现一个结构体成员相对于该结构体首地址的偏移量
- 华为机考HJ6求质因子C语言解法