原题链接:https://www.luogu.com.cn/problem/P2325
树上分块思想,首先只考虑一棵以u为根节点高度为2的子树(从下往上推),如果说它的子结点个数大于b,那么可以将它的子节点分为若干块,每一块都等于b并且认为他们的省会为根节点。最后会有多余的一块,子结点个数小于b,此时可以将它与根节点合成一块,这一块就可以与它相邻的其他子树多余的一块合并,可画图理解。
过程使用一个栈来存结点,遍历一棵子树时,记录此时的栈大小,在将子树中的节点加入栈中,当加入的元素大于等于b就可以分成一块。(大于b的情况就是子树中两颗(或多颗)小子树的合并)。
code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
typedef complex <double> cp;
#define debug(a) cout<<#a<<":"<<a<<endl;
#define fr freopen("in.txt","r",stdin);
#define Fill(x,a) memset(x,a,sizeof(x))
#define cpy(a,b) memcpy(a,b,sizeof(a))
const double eps = 1e-8;
const double inf = 1e20;
const double PI = acos(-1);
const int INF=0x3f3f3f3f;
const int N=1e6+7;
const int mod=1e9+7;
int maxn,minn;
int T,n,m,q;
struct edges{int u,next;
}edge[N];
int cnt,top;
int head[N];
int belong[N];
int root[N];
int sta[N];void init(){cnt = 1;Fill(head,0);return ;
}void add(int u,int v){edge[cnt].u = v;edge[cnt].next = head[u];head[u] = cnt ++ ;return ;
}void dfs(int u,int p){int pos,v;pos = top;for(int i = head[u]; i != 0; i = edge[i].next){v = edge[i].u;if(v == p)   continue;dfs(v,u);if(top - pos >= m){root[++cnt] = u;for(;top != pos; top -- ){belong[sta[top]] = cnt;}}}sta[++top] = u;return ;
}int main(){int u,v;cin >> n >> m;init();for(int i = 1; i <= n - 1; i ++ ){scanf("%d%d",&u,&v);add(u,v);add(v,u);}if(u < m){puts("0");}else{top = cnt = 0;dfs(1,0);for(int i = 1; i <= top; i ++ ){belong[sta[i]] = cnt;}printf("%d\n",cnt);for(int i = 1; i <= n; i ++ ){printf("%d ",belong[i]);}printf("\n");for(int i = 1; i <= cnt; i ++ ){printf("%d ",root[i]);}printf("\n");}return 0;
}

洛谷 P2325 王室联邦相关推荐

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

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

  2. [洛谷]CON1466 洛谷2017春节联欢赛 Hello Dingyou题解 Bzoj4763雪辉

    题目来源:https://www.luogu.org/contest/show?tid=1466 创建时间:2017/3/13 18:33 镇楼图:       猜猜她是谁~ 解题思路: 春节居然也有 ...

  3. 洛谷 P1196 银河英雄传说

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  4. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  5. [SCOI2005]王室联邦

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

  6. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  7. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

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

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

  9. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 手机php环境的openss_php开启openssl的方法
  2. 高性能IO -Reactor模式的实现
  3. alert,confirm和prompt
  4. hibernate 三种查询方式源码跟踪及总结
  5. 2682. 【WC2012选拔12.17】最长双回文串
  6. 201521123035《Java程序设计》第八周学习总结
  7. 类库、通用变量、is和as、委托
  8. 浅谈游戏《Hollow Knight空洞骑士》
  9. MatLab 求平均值,方差,标准差
  10. 计算机程序员三级试题,计算机程序员考试试题及答案.
  11. 服务器cpu天梯图_笔记本CPU排行天梯图2020
  12. Linux - 麒麟17.04 删除桌面图标(计算机,主文件夹,回收站)与 Cairo-Dock 安装配置
  13. 微软账户登入显示空白框,无法创建用户
  14. 不同的「火」在舌頭上的表現也不一樣
  15. CSS | width、height中auto与100%与固定值有什么不同
  16. 前端每日实战:97# 视频演示如何用纯 CSS 创作一组昂首阔步的圆点
  17. 51nod 1737 思维+ 树重心
  18. 浅谈ASCII码、unicode码等
  19. Android 4.0 自定义锁屏
  20. python计算列表中最接近的三数之和

热门文章

  1. 解忧杂货店札记:深夜的口琴声
  2. KLayout学习记录(一)
  3. webSevice基础学习
  4. android10的coloros,OPPOReno10倍变焦版ColorOSV7刷机包(官方最新固件升级包安卓10ColorOS V7)...
  5. Git 错误 Unable to create 'E:/xxx/.git/index.lock': File exists.的解决办法
  6. 失去华为的合作,2nm工艺再延迟量产,台积电真慌了
  7. win10 3月份补丁导致打印PDF蓝屏
  8. html 用event.keycode控制只能输入小写字母,event.keyCode键码值表 附只能输入特定的字符串代码...
  9. mysql查询and和or同时使用
  10. (六)、Fealpy 组装刚度(质量)矩阵和载荷向量