(大概 打了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

8 2
1 2
2 3
1 8
8 7
8 6
4 6
6 5

Sample Output

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

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

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

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

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

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

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

  4. BZOJ 1086 [SCOI2005]王室联邦(树分块)

    题意:中文题,略 思路:秦皇岛前就一直想学,后来没怎么想通,就算了.现在雅不是很懂,一直似懂非懂的,对于树分块的种类,有位聚聚已经整理好了(传送门),其他的就是直接搜索分块 代码: #include ...

  5. [SCOI2005]王室联邦

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

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

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

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

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

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

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

  9. bzoj1086[SCOI2005]王室联邦

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

最新文章

  1. <%=(String)request.getAttribute(““) %>的作用是什么
  2. 软件测试作业1 -- 关于c++项目中类相互调用的问题与解决
  3. 点分治(简要讲解 + 模板)
  4. java常用设计模式一:单例模式
  5. 记录pageHelper分页orderby的坑
  6. vue 动态的修改样式
  7. Nginx解决403 forbidden
  8. ASP.NET对HTML元素进行权限控制(二)
  9. 穿越回二年级讲CPU工作原理。
  10. ipad浏览器安装java_360浏览器苹果平板下载
  11. GPS经纬度坐标与XY坐标相互转换的python程序
  12. 基于阿里云的一般性系统安全措施介绍
  13. 分享链接在微信内被多人投诉怎么办,域名防封方案
  14. 如何将PDF文档进行翻译?PDF文档翻译简单方法介绍
  15. VBA-循环语句之Do...Loop
  16. Esp8266 进阶之路36【外设篇】乐鑫esp8266芯片SDK编程驱动时间芯片 ds1302,同步网络时间到本地,再也不怕掉电断网也可以同步时间了!(附带Demo)
  17. 2021年氧化工艺新版试题及氧化工艺复审考试
  18. mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表
  19. android:gravity=quot;centerquot;,android:layout_gravity=bottom不起作用问题
  20. [附源码]java毕业设计中青年健康管理监测系统

热门文章

  1. c# 将doc转换为docx
  2. 挑战 Oracle 的全球首个 AI 原生数据库 GaussDB,华为将开源
  3. java三次登录锁定_Java基础知识点有哪些 如何快速步入Java行业
  4. mybatis-generator一些注意点 2021-04-21
  5. java解析c的结构体_解析C语言中结构体struct的对齐问题
  6. tiptop 编译运行_putty终于让我的TIPTOP脱离虚拟机在64位上运行了。
  7. 查看oracle大页,在Oracle11.2.0.3.0上开启大页(hugepages)的详细解析
  8. 照片快照清除 android,如何在Android中删除和恢复照片
  9. html代码js正则,过滤所有HTML代码和CSS,JS
  10. aptx android8,秒杀苹果无线音频!Android 8.0蓝牙音质支持aptxHD/LDAC