题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1086

sol  :这题水水啊,直接大力DFS就行了

   首先当且仅当x<B时无解

   对于以x为根的子树,如果未分配的siz[x]>B,则单独划出一个省

   其他未被分配的点随意就近分配就好了

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. using namespace std;
  6. const int Mx=;
  7. int n,k,top,ans,q[Mx],cap[Mx],belong[Mx],siz[Mx];
  8. int tot,head[Mx],nxt[*Mx],ver[*Mx];
  9. inline void add(int x,int y)
  10. {
  11. nxt[++tot]=head[x];
  12. ver[tot]=y;
  13. head[x]=tot;
  14. }
  15. void dfs1(int x,int fa)
  16. {
  17. q[++top]=x;
  18. for(int i=head[x];i;i=nxt[i])
  19. {
  20. int y=ver[i];
  21. if(y!=fa)
  22. {
  23. dfs1(y,x);
  24. if(siz[x]+siz[y]>=k)
  25. {
  26. siz[x]=;
  27. cap[++ans]=x;
  28. while(q[top]!=x) belong[q[top--]]=ans;
  29. }
  30. else siz[x]+=siz[y];
  31. }
  32. }
  33. siz[x]++;
  34. }
  35. void dfs2(int x,int fa,int tmp)
  36. {
  37. if(belong[x]) tmp=belong[x];
  38. else belong[x]=tmp;
  39. for(int i=head[x];i;i=nxt[i])
  40. {
  41. int y=ver[i];
  42. if(y!=fa)
  43. dfs2(y,x,tmp);
  44. }
  45. }
  46. void output()
  47. {
  48. cout<<ans<<endl;
  49. for(int i=;i<=n;i++) cout<<belong[i]<<" ";cout<<endl;
  50. for(int i=;i<=ans;i++) cout<<cap[i]<<" ";cout<<endl;
  51. }
  52. int main()
  53. {
  54. scanf("%d%d",&n,&k);
  55. if(n<k) { cout<<""<<endl; return ; }
  56. for(int i=,x,y;i<n;i++)
  57. {
  58. scanf("%d%d",&x,&y);
  59. add(x,y),add(y,x);
  60. }
  61. dfs1(,); if(!ans) cap[++ans]=;
  62. dfs2(,,ans);
  63. output();
  64. return ;
  65. }

bzoj1086【SCOI2005】王室联邦的更多相关文章

  1. bzoj1086 [SCOI2005]王室联邦 树分块

    [bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...

  2. BZOJ1086 [SCOI2005]王室联邦

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

  3. BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)

    Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2610  Solved: 1584[Submit][Status] ...

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

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

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

    递归处理子树,把当前结点当作栈底,然后递归,回溯回来之后如果栈中结点数量到达某一个标准时,弹出栈中所有的元素分到一个块中,最后递归结束了如果栈中还有元素,那么剩下的这些元素放在新的块中 题目:BZOJ ...

  6. BZOJ1086 [SCOI2005]王室联邦(树分块)

    把树的结点分块,块内结点连通且个数[b,3b]. 一遍DFS,维护一个栈,设置一个虚拟栈底以保证连通,递归返回时判断栈内元素个数是否大于等于b,是则划分为一个块,最后剩下的与最后一个块划分在一起. h ...

  7. 2018.09.16 bzoj1086: [SCOI2005]王室联邦(贪心)

    传送门 就是给树分块. 对于一个节点. 如果它的几棵子树加起来超过了下限,就把它们分成一块. 这样每次可能会剩下几个节点. 把它们都加入栈中最顶上那一块就行了. 代码: #include<bit ...

  8. BZOJ1086 SCOI2005王室联邦

    想学树上莫队结果做了个树分块. 看完题后想到了菊花图的形状认为无解,结果仔细一瞧省会可以在外省尴尬 对于每一颗子树进行深搜,一旦遇到加在一起大小达到B则将它们并为一省,因为他子树搜完以后没有分出块的大 ...

  9. BZOJ 1086: [SCOI2005]王室联邦

    1086: [SCOI2005]王室联邦 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1399  Solved: ...

  10. 【BZOJ-1086】王室联邦 分块 + 块状树

    1086: [SCOI2005]王室联邦 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1094  Solved: ...

随机推荐

  1. Python判断一个数是否为小数

    一.判断一个数是否为小数 1.有且仅有一个小数点 2.小数点的左边可能为正数或负数 3.小数点的右边为正数 二.实现代码 def is_float(str): if str.count('.') == ...

  2. 安装软件出现缺少vcruntime140dll的解决方法

    转自:http://jingyan.baidu.com/article/49711c617e4000fa441b7c92.html 首先下载vc++2015,注意自己系统是32位还是64位的,下载对应 ...

  3. 深入理解new String()

    一. 引言 new String("hello")这样的创建方式,到底创建了几个String对象? 二. 分析 String s1 = "HelloWorld" ...

  4. 问题006:为什么用java.exe执行编译的类文件的时候,不这样写java Welcome.class

    为什么用java.exe执行编译的类文件的时候,不这样写java Welcome.class 是因为java虚拟机调用Welcome的时候,已经替我们增减了.class,如果你还要写java Welc ...

  5. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  6. yii2初步讲解 验证规则

    http://www.yii-china.com/post/detail/9.html

  7. Python基础闯关失败总结

    对列表进行创建切片增删改查 对列表进行创建 L1 = []  # 定义L1 为一个空列表 List() #创建List 空列表 对列表进行查询 L2 = ['a','b','c','d','a','e ...

  8. volley框架使用

    volley网络请求一个json数据很简单,一句话就搞定了. StringRequest stringRequest=new StringRequest(url, new Listener<St ...

  9. bootstrap button

    样式修改 .sign-button, .sign-button:hover, .sign-button:focus, .sign-button:active, .sign-button:visited ...

  10. 线性回归、逻辑回归(LR)

    线性回归 回归是一种极易理解的模型,就相当于y=f(x),表明自变量 x 和因变量 y 的关系.最常见问题有如 医生治病时的望.闻.问.切之后判定病人是否生了什么病,其中的望闻问切就是获得自变量x,即 ...