[bzoj1086]王室联邦


树分块裸题。。。(学树上莫队前提条件之一)

http://blog.csdn.net/wzq_qwq/article/details/47297885

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <map>
 6 #include <string>
 7 #include <vector>
 8 #include <stack>
 9 #include <cmath>
10 #include <queue>
11 #include <cstdio>
12 #include <set>
13 using namespace std;
14 
15 const int N=10000;
16 
17 int tot=1,head[N],rest[N],to[N];
18 void add(int u,int v){
19     tot++;
20     to[tot]=v;
21     rest[tot]=head[u];
22     head[u]=tot;
23 }
24 int n,b;
25 int st[N],p,bel[N],root[N],v[N],cnt;
26 void dfs(int x){
27     v[x]=1;
28     int bot=p;
29     for(int i=head[x];i;i=rest[i]){
30         int t=to[i];
31         if(!v[t]){
32             dfs(t);
33             if(p-bot>=b){
34                 root[++cnt]=x;
35                 do
36                     bel[st[p--]]=cnt;
37                 while(p!=bot);
38             }
39         }
40     }
41     st[++p]=x;
42 }
43 int main(){
44     scanf("%d%d",&n,&b);
45     for(int i=1;i<n;i++){
46         int u,v;
47         scanf("%d%d",&u,&v);
48         add(u,v);
49         add(v,u);
50     }
51     dfs(1);
52     while(p)bel[st[p--]]=cnt;
53     printf("%d\n",cnt);
54     for(int i=1;i<n;i++)printf("%d ",bel[i]);
55     printf("%d\n",bel[n]);
56     for(int i=1;i<cnt;i++)printf("%d ",root[i]);
57     printf("%d\n",root[cnt]);
58 }
View Code

优质内容筛选与推荐>>
1、debug-stripped.ap_' specified for property 'resourceFile' does not exist
2、Visual Studio Debug
3、IE8 访问https安全证书错误;导航阻止 解决办法 《转》
4、【Next-Key Locks】Mysql的NextKey锁机制
5、seo自动宣传小精灵V8.0


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn