1086: [SCOI2005]王室联邦
(大概 打了5天比赛 学习计划 树上莫队一直都没来得及学 今天做了第一道树上分块的题 写挂了5,6次 许多细节没有注意到 慢慢改才发现 orz 继续加油
1086: [SCOI2005]王室联邦
Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge
Submit: 2319 Solved: 1423
[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
1 2
2 3
1 8
8 7
8 6
4 6
6 5
Sample Output
2 1 1 3 3 3 3 2
2 1 8
#include <bits/stdc++.h>
#define N 1005
#define ll long long
using namespace std;
ll readll(){ll 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 readint(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return f*x;
}
vector<int>vec[N];
int n,b,cnt;
int num[N],pre[N];
int p[N],fp[N];
bool vis[N];
void dfs1(int v,int fa){num[v]=1;pre[v]=fa;for(int i=0;i<vec[v].size();i++){int u=vec[v][i];if(u!=fa){dfs1(u,v);num[v]+=num[u];}}if(num[v]>=b){if(num[v]<=2*b){p[v]=cnt;fp[cnt]=v;num[v]=0;cnt++;vis[v]=1;}else{int ans=0;for(int i=0;i<vec[v].size();i++){if(vec[v][i]==fa) continue;ans+=num[vec[v][i]];if(ans>=b){fp[cnt]=v;p[vec[v][i]]=cnt;cnt++;num[v]-=ans;ans=0;}}if(!ans) p[v]=cnt-1,num[v]=0;int t=0;for(int i=vec[v].size()-1;i>=0;i--){if(vec[v][i]==fa||vis[vec[v][i]]==1) continue;if(p[vec[v][i]]) t=p[vec[v][i]];else p[vec[v][i]]=t;if(p[vec[v][i]]) num[vec[v][i]]=0,vis[vec[v][i]]=1;}}}
}
void dfs2(int v){for(int i=0;i<vec[v].size();i++){int u=vec[v][i];if(u!=pre[v]){if(!p[u]) p[u]=p[v];dfs2(u);}}
}
int main(){ios::sync_with_stdio(false);n=readint();b=readint();int u,v;cnt=1;for(int i=1;i<n;i++){u=readint();v=readint();vec[u].push_back(v);vec[v].push_back(u);}dfs1(1,-1);cnt--;if(!p[1]) p[1]=cnt;dfs2(1);printf("%d\n",cnt);for(int i=1;i<=n;i++) printf("%d ",p[i]);printf("\n");for(int i=1;i<=cnt;i++) printf("%d ",fp[i]);printf("\n");return 0;
}
转载于:https://www.cnblogs.com/wang9897/p/8454622.html
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]王室联邦
Description "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有 ...
- BZOJ 1086 [SCOI2005]王室联邦(树分块)
题意:中文题,略 思路:秦皇岛前就一直想学,后来没怎么想通,就算了.现在雅不是很懂,一直似懂非懂的,对于树分块的种类,有位聚聚已经整理好了(传送门),其他的就是直接搜索分块 代码: #include ...
- [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.一些 ...
最新文章
- <%=(String)request.getAttribute(““) %>的作用是什么
- 软件测试作业1 -- 关于c++项目中类相互调用的问题与解决
- 点分治(简要讲解 + 模板)
- java常用设计模式一:单例模式
- 记录pageHelper分页orderby的坑
- vue 动态的修改样式
- Nginx解决403 forbidden
- ASP.NET对HTML元素进行权限控制(二)
- 穿越回二年级讲CPU工作原理。
- ipad浏览器安装java_360浏览器苹果平板下载
- GPS经纬度坐标与XY坐标相互转换的python程序
- 基于阿里云的一般性系统安全措施介绍
- 分享链接在微信内被多人投诉怎么办,域名防封方案
- 如何将PDF文档进行翻译?PDF文档翻译简单方法介绍
- VBA-循环语句之Do...Loop
- Esp8266 进阶之路36【外设篇】乐鑫esp8266芯片SDK编程驱动时间芯片 ds1302,同步网络时间到本地,再也不怕掉电断网也可以同步时间了!(附带Demo)
- 2021年氧化工艺新版试题及氧化工艺复审考试
- mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表
- android:gravity=quot;centerquot;,android:layout_gravity=bottom不起作用问题
- [附源码]java毕业设计中青年健康管理监测系统
热门文章
- c# 将doc转换为docx
- 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
- java三次登录锁定_Java基础知识点有哪些 如何快速步入Java行业
- mybatis-generator一些注意点 2021-04-21
- java解析c的结构体_解析C语言中结构体struct的对齐问题
- tiptop 编译运行_putty终于让我的TIPTOP脱离虚拟机在64位上运行了。
- 查看oracle大页,在Oracle11.2.0.3.0上开启大页(hugepages)的详细解析
- 照片快照清除 android,如何在Android中删除和恢复照片
- html代码js正则,过滤所有HTML代码和CSS,JS
- aptx android8,秒杀苹果无线音频!Android 8.0蓝牙音质支持aptxHD/LDAC