luogu P2325 [SCOI2005]王室联邦
做法是dfs整棵树,当访问一个点\(x\)时,先访问儿子,若某个时刻子树大小\(\ge b\)时,就把那些点放在一个省里,省会记为\(x\),访问完儿子再把\(x\)加入栈.最后栈中剩余的没加入任何省的点加入最后一个省
(这就叫做树分块)
正确性的话,首先前面的省大小\(\le 2b\),然后在最后栈中剩余的点\(\le b\),所以一个省最多\(3b\)个点
有人说树分块没什么用 不过好像除了这题和树上莫队确实没什么用
#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
using namespace std;
const int N=5000+10;
il int rd()
{
  int x=0,w=1;char ch=0;
  while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  return x*w;
}
int to[N<<1],nt[N<<1],hd[N],tot=1;
il void add(int x,int y)
{
  ++tot,to[tot]=y,nt[tot]=hd[x],hd[x]=tot;
  ++tot,to[tot]=x,nt[tot]=hd[y],hd[y]=tot;
}
int n,b,ff[N],sh[N],m;
int st[N],tp;
void dfs(int x,int ffa)
{
  int la=tp;
  for(int i=hd[x];i;i=nt[i])
    {
      int y=to[i];
      if(y==ffa) continue;
      dfs(y,x);
      if(tp-la>=b)
        {
          sh[++m]=x;
          while(tp!=la) ff[st[tp--]]=m;
        }
    }
  st[++tp]=x;
}
int main()
{
  n=rd(),b=rd();
  for(int i=1;i<n;++i) add(rd(),rd());
  for(int i=1;i<=n;++i) ff[n+i]=n+i;
  dfs(1,0);
  while(tp) ff[st[tp--]]=m;
  printf("%d\n",m);
  for(int i=1;i<=n;++i) printf("%d ",ff[i]);putchar('\n');
  for(int i=1;i<=m;++i) printf("%d ",sh[i]);
  return 0;
}
luogu P2325 [SCOI2005]王室联邦的更多相关文章
- P2325 [SCOI2005]王室联邦 解题报告
		P2325 [SCOI2005]王室联邦 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有\(n\) ... 
- 洛谷P2325 [SCOI2005]王室联邦
		P2325 [SCOI2005]王室联邦 题目描述 "余"人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有n个城市, ... 
- P2325 [SCOI2005]王室联邦
		题目描述 “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理. 他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不同的城市之间 ... 
- 洛谷 P2325 [SCOI2005]王室联邦
		简化版题意: 一个国家由\(n\)个城市组成一颗树,要将其划分为\(n\)个省 每个城市大小为\([B,3B]\),每个省有一个省会(不一定要在省内),使得每个省的所有城市到省会的路径上不能经过其他省 ... 
- BZOJ 1086: [SCOI2005]王室联邦
		1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1399 Solved: ... 
- 【块状树】BZOJ 1086: [SCOI2005]王室联邦
		1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 826 Solved: ... 
- 1086: [SCOI2005]王室联邦
		1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 1554 Solved: ... 
- bzoj1086 [SCOI2005]王室联邦 树分块
		[bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ... 
- Bzoj 1086: [SCOI2005]王室联邦(分块)
		1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 1557 Solved: 9 ... 
随机推荐
- MT【207】|ax^2+bx+c|中判别式$\Delta$的含义
			已知$a,b\in R^+,a+b=2$且对任意的$x\in R$,均有$|2x^2+ax-b|\ge|x^2+cx+d|$则$\dfrac{d-4c}{cd}$的最小值______ 提示:注意到$\ ... 
- 自学Linux Shell8.1-linux文件系统概述及操作
			点击返回 自学Linux命令行与Shell脚本之路 8.1-linux文件系统概述及操作 1. linux支持的文件系统 Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式 ... 
- 自学Zabbix2.3-服务器端server安装过程
			点击返回:自学Zabbix之路 .... 
- BZOJ 4009: [HNOI2015]接水果
			4009: [HNOI2015]接水果 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 636 Solved: 300[Submit][Status] ... 
- 洛谷 P4148 简单题 解题报告
			P4148 简单题 题意 维护单点加与矩形求和,强制在线 说明 \(n\le 500000,m\le 200000\),\(4000ms / 20MB\) kd-tree 复杂度我不懂 是一颗平衡树, ... 
- 洛谷 P3853 路标设置 解题报告
			P3853 路标设置 题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路 ... 
- 洛谷 P2292 [HNOI2004] L语言 解题报告
			P2292 [HNOI2004] L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章\(T\)是由若干小写字母构成.一个单词 ... 
- bzoj4817/luogu3703 树点涂色 (LCT+dfs序+线段树)
			我们发现,这个染色的操作他就很像LCT中access的操作(为什么??),然后就自然而然地想到,其实一个某条路径上的颜色数量,就是我们做一个只有access操作的LCT,这条路径经过的splay的数量 ... 
- luogu2865 路障 (dijkstra)
			求次短路,dijkstra时同时记下到某点的最短距离和次短距离即可. #include<cstdio> #include<cstring> #include<algori ... 
- 解决FLASH遮住层的问题 IE,Firefox都适用!
			<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://down ... 
