【P2325】王室联邦(树的遍历+贪心)
在肖明
#神#
的推荐下,我尝试了这个题,一开始想的是暴力枚举所有的点,然后bfs层数,试着和肖明
#神#
说了这种方法之后,
#神#
轻蔑的一笑,说这不就是一个贪心么,你只需要先建树,然后从底下向上遍历,够了B个点就算作一个省。
#神#
的话让我豁然开朗,这个题貌似真的不是那么难诶。
然后
#神#
回去写作业了,蒟蒻我还在机房里思考
#神#
的话。仔细想了一下,发现这么贪心正确性显然。像
#神#
说的遍历树,然后当整棵树基本上快遍历完的时候,会出现剩下几个点不够B个的情况,然后就直接把他们连到根上,可以知道,因为我们之前是每个省都是B个城市,所以就算加到根上,根的那个省的城市还是会小于3\*B,所以这么就可以得出最优解。
然而书上的代码蒟蒻实现难度太高,,所以又借助了一下题解的力量。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define re register
#define maxn 1000007
#define ll long long
using namespace std;
struct po
{
int to,from,nxt;
};
po edge[];
int head[],n,m,B,b[],ans,t,rt[],fa,cnt,srk[],num,s;
inline void add_edge(int from,int to)
{
edge[++num].nxt=head[from];
edge[num].to=to;
head[from]=num;
}
inline void dfs(int u,int f)
{
int q=fa;
for(re int i=head[u];i;i=edge[i].nxt)
{
if(edge[i].to==f)
continue;
dfs(edge[i].to,u);
if(fa-q>=B)
{
cnt++;
rt[cnt]=u;
while(fa>q)
{
b[srk[fa--]]=cnt;
}
}
}
srk[++fa]=u;
}
int main()
{
cin>>n>>B;
for(re int i=;i<=n-;i++)
{
cin>>s>>t;
add_edge(s,t);
add_edge(t,s);
}
dfs(,);
while(fa)
{
b[srk[fa--]]=cnt;
}
cout<<cnt<<endl;
for(re int i=;i<=n;i++)
cout<<b[i]<<" ";
cout<<endl;
for(re int i=;i<=cnt;i++)
{
cout<<rt[i]<<" ";
}
return ;
}
【P2325】王室联邦(树的遍历+贪心)的更多相关文章
- BZOJ1086 王室联邦 —— 树分块
题目链接:https://vjudge.net/problem/HYSBZ-1086 1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 16 ...
- bzoj1086 [SCOI2005]王室联邦 树分块
[bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...
- 【bzoj1086】[SCOI2005]王室联邦 树分块
题目描述 将一棵n个点的树分为若干“块”,每个块满足:大小在B到3B之间,并且这个“块”添加某个点后连通.求方案. 输入 第一行包含两个数N,B(1<=N<=1000, 1 <= B ...
- 洛谷P2325王室联邦 SCOI2005 构造+树上分块
正解:构造 解题报告: 照例先放传送门 umm其实我jio得这题应该在教树上莫队的时候港,应该是用来帮助理解树上莫队的分块方式的 然而这题是在学了树上分块之后再遇到的?就显得没那么难了吼 然后就随便说 ...
- P2325 [SCOI2005]王室联邦
题目描述 “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不同的城市之间 ...
- P2325 [SCOI2005]王室联邦 解题报告
P2325 [SCOI2005]王室联邦 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有\(n\) ...
- 【BZOJ-1086】王室联邦 分块 + 块状树
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1094 Solved: ...
- 【块状树】BZOJ 1086: [SCOI2005]王室联邦
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 826 Solved: ...
- 洛谷P2325 [SCOI2005]王室联邦
P2325 [SCOI2005]王室联邦 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有n个城市, ...
随机推荐
- 怎样在Mac OS X上面指定Eclipse启动时用指定的某一版本号JDK?
编辑 $ECLIPSE_HOME/Eclipse.app/Contents/MacOS/eclipse.ini 文件.在 Finder 中右键或者Ctrl+点击 Eclipse 应用程序.然后点击&q ...
- SAE+wordpress邮箱问题,WP MAIL STMP插件配置但无效解决的方法
我在SAE上面部署的WordPress是3.9版本号的,而非SAE应用商店里WordPress4sae是3.4的,虽然3.9版本号的确有非常多改进但在部署在SAE上面时须要做非常多改动,并且有些插件也 ...
- linux/unix下telnet提示Escape character is '^]'的意义
在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...
- 十六进制字符串 char 数组 转换 c/c++/java
转载自:http://qing.blog.sina.com.cn/1820422183/6c81702733001qvk.html 1.c版 int hexcharToInt(char c) { ...
- SharePoint服务器端对象模型 之 序言
对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...
- 一个有趣的IP不同的问题?
1.我们已经知道了内网和外网的显示是不同的. 2.今天发现了我的飞Q传输上显示的ip和电脑上网络中显示的ip不同,但是传输文件是可以的,至于这个问题目前没有找到合理的解释,解释这个问题,但是这样就奇怪 ...
- Unit redis-server.service is masked.
http://stackoverflow.com/questions/40317106/failed-to-start-redis-service-unit-redis-server-service- ...
- Python菜鸟之路:DOM基础
前言 DOM 是 Document Object Model(文档对象模型)的缩写,定义了访问和操作 HTML 文档的标准方法.DOM把网页和脚本以及其他的编程语言联系了起来.DOM属于浏览器,而不是 ...
- 卸载SQL Server 2008 (R2)
一.卸载SQL Server 2008 (R2) 1.找到控制面板,win8及win7都可以直接点解“开始”按钮找到. (Tip:win10系统的小盆友可以在“开始”菜单下点击“所有应用”,找到win ...
- 我的第二个Python小程序
输出0-100之间的偶数: # Author: fansik # Description: Output an even number between 0 and 100 # method one n ...