来自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]王室联邦相关推荐

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

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

  2. bzoj1086[SCOI2005]王室联邦

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

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

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

  4. [SCOI2005]王室联邦

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

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

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

  6. 1086: [SCOI2005]王室联邦

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

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

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

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

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

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

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

最新文章

  1. 用Tcl定制Vivado设计实现流程
  2. pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)...
  3. 【uni-app】rich-text 无法处理 video 的解决办法
  4. Eclipse中java文件编码格式修改
  5. 无限重启_三星蓝光播放器出现无限自动重启BUG,涉及不少用户及不同型号
  6. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
  7. kettle优化抽取数据速度_基于kettle工具提高表输出写入速度(每秒万条记录)
  8. 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
  9. Failed to execute goal org.apache.maven.plugins:ma
  10. 【376天】每日项目总结系列113(2018.02.16)
  11. PAIP.FLEX与JAVA数据对应关系.txt
  12. rootkit的检测
  13. 为什么刚度阵对称?根本原因在于物理方程。知识点:矩阵微积分,物理方程
  14. 名编辑电子杂志大师教程 | PDF制作排版设计建议
  15. Visual Studio 2022 WinForm/Wpf打包安装程序
  16. micrium ucprobe使用指南
  17. 解决the application was unable to start correctly(0x000007b)与 缺少VCRUNTIME140.dll
  18. 计算机限制无线网络,无线网络连接受限制怎么办 无线网络连接受限解决方法【图文】...
  19. wmp 11安装方法
  20. 冷战——婚姻生活的双刃剑

热门文章

  1. 软件测试基础方法总结
  2. 2015年创业中遇到的技术问题:21-30
  3. at for lte
  4. 【log4net】配置文件
  5. AJAX(异步的 JavaScript 和 XML)
  6. Linux---文件操作
  7. win10我的电脑在哪里找到
  8. 频繁使用花呗、借呗、微粒贷、京东白条会影响在银行的信用吗?
  9. 多肉建议多久浇一次水?
  10. 人与人之间交往最重要的是什么?