zoukankan      html  css  js  c++  java
  • 模拟赛DAY1 T2腐草为萤

    2.腐草为萤
    (dzy.cpp/c)

    【题目背景】

    纤弱的淤泥中妖冶
    颓废在季夏第三月
    最幼嫩的新叶连凋零都不屑
    何必生离死别
    ——银临《腐草为萤》

    【问题描述】

    扶苏给了你一棵树,这棵树上长满了幼嫩的新叶,我们约定这棵树的根是1,每个节
    点都代表树上的一个叶子。
    如果你不知道什么叫树,你可以认为树是一个边数比节点个数少1 的无向连通图。
    我们如果约定节点u 是树T 的根,则可以定义一个节点v 到根的路径为该无向图上u, v
    两个节点之间的简单路径上的节点集合(包括路径的两个端点)。可以证明,这样的简单路
    径只有一条。
    我们定义节点x 是节点y 的祖先(x ≠ y),当且仅当x 在y 到根的路径上。

    现在扶苏想在这棵树上选定一个集合,将其称之为幼嫩集合,来比较集合中的节点
    哪个最幼嫩。注意到一旦集合中存在两个节点u, v,使得u 是v 的祖先,那么一定v 要比
    u 更幼嫩,因为v 是在u 的枝丫上生长出来的,那么这样的集合就是没有意义的。也就是
    说,扶苏所选择的集合一定满足要求“对于任意集合中的元素对(u, v),u 不是v 的祖先”。

    扶苏其实对这些节点哪个最幼嫩并不感兴趣,也对他能选出多少集合不感兴趣,因
    为这些都是为了问你下面的问题而创造出的题目背景。
    扶苏给每个节点都定义了一个权值,具体的,我们会给出一个参数T,规定 i 号节点
    的权值为 iT
    我们定义一个幼嫩集合幼嫩指数为集合内节点的权值和。现在扶苏想请问你,对于
    他所有可能选出的集合,这些集合的幼嫩指数之和是多少。
    为了避免答案过大,请你输出答案对 109 + 7取模的结果。

    【输入格式】
    输入文件名为dzy.in。
    输入文件中有且仅有一组数据,第一行为两个正整数n 和T,节点个数和权值参数。
    下面n-1 行,每行有两个正整数u, v,代表树上有一条边连接节点u 和节点v。


    【输出格式】
    输出文件名为dzy.out。
    输出一行一个正整数,代表答案对 109 +7取模的结果。

    【样例1 解释】
    一共有10 个集合,分别为
     {1}  ,  {2}  ,  {3}  ,  {4}  ,  {5}  ,  {2,5}  ,  {3,4}  ,   {3,5}  ,  {3,4,5}  ,  {4,5}
    由于T=0,所有节点的权值都为1,所以幼嫩指数之和即为集合元素个数和,
    共16个。

     

    2.腐草为萤
    (dzy.cpp/c)

    【题目背景】

    纤弱的淤泥中妖冶
    颓废在季夏第三月
    最幼嫩的新叶连凋零都不屑
    何必生离死别
    ——银临《腐草为萤》

    【问题描述】

    扶苏给了你一棵树,这棵树上长满了幼嫩的新叶,我们约定这棵树的根是1,每个节
    点都代表树上的一个叶子。
    如果你不知道什么叫树,你可以认为树是一个边数比节点个数少1 的无向连通图。
    我们如果约定节点u 是树T 的根,则可以定义一个节点v 到根的路径为该无向图上u, v
    两个节点之间的简单路径上的节点集合(包括路径的两个端点)。可以证明,这样的简单路
    径只有一条。
    我们定义节点x 是节点y 的祖先(x ≠ y),当且仅当x 在y 到根的路径上。

    现在扶苏想在这棵树上选定一个集合,将其称之为幼嫩集合,来比较集合中的节点
    哪个最幼嫩。注意到一旦集合中存在两个节点u, v,使得u 是v 的祖先,那么一定v 要比
    u 更幼嫩,因为v 是在u 的枝丫上生长出来的,那么这样的集合就是没有意义的。也就是
    说,扶苏所选择的集合一定满足要求“对于任意集合中的元素对(u, v),u 不是v 的祖先”。

    扶苏其实对这些节点哪个最幼嫩并不感兴趣,也对他能选出多少集合不感兴趣,因
    为这些都是为了问你下面的问题而创造出的题目背景。
    扶苏给每个节点都定义了一个权值,具体的,我们会给出一个参数T,规定 i 号节点
    的权值为 iT
    我们定义一个幼嫩集合幼嫩指数为集合内节点的权值和。现在扶苏想请问你,对于
    他所有可能选出的集合,这些集合的幼嫩指数之和是多少。
    为了避免答案过大,请你输出答案对 109 + 7取模的结果。

    【输入格式】
    输入文件名为dzy.in。
    输入文件中有且仅有一组数据,第一行为两个正整数n 和T,节点个数和权值参数。
    下面n-1 行,每行有两个正整数u, v,代表树上有一条边连接节点u 和节点v。


    【输出格式】
    输出文件名为dzy.out。
    输出一行一个正整数,代表答案对 109 +7取模的结果。

    【样例1 解释】
    一共有10 个集合,分别为
     {1}  ,  {2}  ,  {3}  ,  {4}  ,  {5}  ,  {2,5}  ,  {3,4}  ,   {3,5}  ,  {3,4,5}  ,  {4,5}
    由于T=0,所有节点的权值都为1,所以幼嫩指数之和即为集合元素个数和,
    共16个。

     

    2.腐草为萤
    (dzy.cpp/c)

    【题目背景】

    纤弱的淤泥中妖冶
    颓废在季夏第三月
    最幼嫩的新叶连凋零都不屑
    何必生离死别
    ——银临《腐草为萤》

    【问题描述】

    扶苏给了你一棵树,这棵树上长满了幼嫩的新叶,我们约定这棵树的根是1,每个节
    点都代表树上的一个叶子。
    如果你不知道什么叫树,你可以认为树是一个边数比节点个数少1 的无向连通图。
    我们如果约定节点u 是树T 的根,则可以定义一个节点v 到根的路径为该无向图上u, v
    两个节点之间的简单路径上的节点集合(包括路径的两个端点)。可以证明,这样的简单路
    径只有一条。
    我们定义节点x 是节点y 的祖先(x ≠ y),当且仅当x 在y 到根的路径上。

    现在扶苏想在这棵树上选定一个集合,将其称之为幼嫩集合,来比较集合中的节点
    哪个最幼嫩。注意到一旦集合中存在两个节点u, v,使得u 是v 的祖先,那么一定v 要比
    u 更幼嫩,因为v 是在u 的枝丫上生长出来的,那么这样的集合就是没有意义的。也就是
    说,扶苏所选择的集合一定满足要求“对于任意集合中的元素对(u, v),u 不是v 的祖先”。

    扶苏其实对这些节点哪个最幼嫩并不感兴趣,也对他能选出多少集合不感兴趣,因
    为这些都是为了问你下面的问题而创造出的题目背景。
    扶苏给每个节点都定义了一个权值,具体的,我们会给出一个参数T,规定 i 号节点
    的权值为 iT
    我们定义一个幼嫩集合幼嫩指数为集合内节点的权值和。现在扶苏想请问你,对于
    他所有可能选出的集合,这些集合的幼嫩指数之和是多少。
    为了避免答案过大,请你输出答案对 109 + 7取模的结果。

    【输入格式】
    输入文件名为dzy.in。
    输入文件中有且仅有一组数据,第一行为两个正整数n 和T,节点个数和权值参数。
    下面n-1 行,每行有两个正整数u, v,代表树上有一条边连接节点u 和节点v。


    【输出格式】
    输出文件名为dzy.out。
    输出一行一个正整数,代表答案对 109 +7取模的结果。

    【样例1 解释】
    一共有10 个集合,分别为
     {1}  ,  {2}  ,  {3}  ,  {4}  ,  {5}  ,  {2,5}  ,  {3,4}  ,   {3,5}  ,  {3,4,5}  ,  {4,5}
    由于T=0,所有节点的权值都为1,所以幼嫩指数之和即为集合元素个数和,
    共16个。

     

    #include <cstdio>
    
    typedef long long int ll;
    
    const int maxn = 1000005;
    const int MOD = 1000000007;
    
    template <typename T>
    inline void qr(T &x) {
      char ch;
      do { ch = getchar(); } while ((ch > '9') || (ch < '0'));
      do { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } while ((ch >= '0') && (ch <= '9'));
    }
    
    int n, T;
    int MU[maxn], frog[maxn], gorf[maxn];
    bool vis[maxn];
    
    struct Edge {
      int v;
      Edge *nxt;
    
      Edge(const int _v, Edge *h) : v(_v), nxt(h) {}
    };
    Edge *hd[maxn];
    
    void dfs(const int u);
    
    int main() {
      freopen("dzy.in", "r", stdin);
      freopen("dzy.out", "w", stdout);
      qr(n); qr(T);
      if (T) {
        for (int i = 1; i <= n; ++i) {
          MU[i] = i;
        }
      } else {
        for (int i = 1; i <= n; ++i) {
          MU[i] = 1;
        }
      }
      for (int i = 1, u, v; i < n; ++i) {
        u = v = 0; qr(u); qr(v);
        hd[u] = new Edge(v, hd[u]);
        hd[v] = new Edge(u, hd[v]);
      }
      dfs(1);
      printf("%d
    ", frog[1] % MOD);
      return 0;
    }
    
    void dfs(const int u) {
      vis[u] = true;
      for (auto e = hd[u]; e; e = e->nxt) if (!vis[e->v]) {
        int v = e->v;
        dfs(v);
        frog[u] = (frog[u] * (gorf[v] + 1ll) % MOD) + (frog[v] * (gorf[u] + 1ll) % MOD);
        gorf[u] = (gorf[u] + gorf[v] + (1ll * gorf[u] * gorf[v])) % MOD;
      }
      frog[u] = (frog[u] + MU[u]) % MOD;
      ++gorf[u];
    }
  • 相关阅读:
    cron生成
    sp_addlinkedserver,Synonym
    上海城市坐标
    评分插件 jquery.raty.js
    ORA-12514: TNS:listener does not currently know of service requested in connect
    ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
    工厂模式
    单例模式
    Qt中的Q_OBJECT作用, 以及信号槽
    DDLog-不同颜色打印信息
  • 原文地址:https://www.cnblogs.com/lcezych/p/11072476.html
Copyright © 2011-2022 走看看