zoukankan      html  css  js  c++  java
  • 牛客练习赛9 珂朵莉的值域连续段

    https://www.nowcoder.com/acm/contest/40/B

    题意:

    珂朵莉给你一个有根树,求有多少个子树满足其内部节点编号在值域上连续。

    思路:
    统计每棵子树的最大最小值以及其子树大小。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<vector>
     4 using namespace std;
     5 const int maxn = 100000+5;
     6 
     7 int n, num[maxn],mi[maxn],mx[maxn],degree[maxn];
     8 vector<int> g[maxn];
     9 
    10 void dfs(int u)
    11 {
    12     num[u] = 1;
    13     mi[u] = mx[u] = u;
    14     for(int i=0;i<g[u].size();i++)
    15     {
    16         int v = g[u][i];
    17         dfs(v);
    18         num[u] += num[v];
    19         mi[u] = min(mi[u], mi[v]);
    20         mx[u] = max(mx[u], mx[v]);
    21     }
    22 }
    23 
    24 int main()
    25 {
    26     //freopen("in.txt","r",stdin);
    27     scanf("%d",&n);
    28     for(int i=1;i<n;i++)
    29     {
    30         int u,v;
    31         scanf("%d%d",&u,&v);
    32         g[u].push_back(v);
    33         degree[v]++;
    34     }
    35     int root;
    36     for(int i=1;i<=n;i++)
    37     {
    38         if(degree[i]==0)
    39         {
    40             root = i;
    41             break;
    42         }
    43     }
    44     dfs(root);
    45     int ans = 0;
    46     for(int i=1;i<=n;i++)
    47     {
    48         if(mx[i]-mi[i]==num[i]-1)  ans++;
    49     }
    50     printf("%d
    ",ans);
    51     return 0;
    52 }
  • 相关阅读:
    Domain Model
    linux 后台运行命令
    morphia(3)-查询
    [八省联考2018] 劈配
    [BZOJ 3218] a+b Problem
    [学习笔记] KM算法
    [HNOI2013] 消毒
    [HNOI2014] 画框
    [HDU 6057] Kanade's convolution
    [模板] 任意模数多项式乘法
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/8459116.html
Copyright © 2011-2022 走看看