zay大爷的神仙题目 D1T2-腐草为萤

题面如下

依照旧例放外链

【题目背景】

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

【问题描述】

扶苏给了你一棵树,这棵树上长满了幼嫩的新叶,我们约定这棵树的根是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个。

这个题。。。。。。我一开始以为每一个幼嫩集合只能是两个点,那时候我就想,哎呀这题好,,,,,,结果妥妥爆零

对于这道题,我们一点一点得分哈

第一个点,,,,很明显直接输出0就行。。。。但是因为我在写暴力的时候数组开大了所以程序爆了QWQ。。。。。md我爆零了。。。。

第二阶段,一看这数据范围,那肯定暴力跑不了了,剩下的看图吧QWQ

贴代码

#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\n", 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];
}

原文地址:https://www.cnblogs.com/this-is-M/p/11073365.html

时间: 2024-10-16 00:34:45

zay大爷的神仙题目 D1T2-腐草为萤的相关文章

zay大爷的神仙题目 D1T3-膜你抄

依旧是外链 锦鲤抄 [题目背景] 你在尘世中辗转了千百年 却只让我看你最后一眼 火光描摹容颜燃尽了时间 别留我一人,孑然一身 凋零在梦境里面. ——银临&云の泣<锦鲤抄> [问题描述] 这首歌的文案讲述了这样一个故事: 在一个兵荒马乱的年代,有一位画师叫浅溪,非常喜欢画锦鲤.战火烧到了泰安,他的邻居都惊慌逃命,只有他不舍得池中锦鲤没有离开.这天晚上庭院失火,池中的锦鲤化妖,用生命护住了画师的平安. 注意:由于本题题面涉及到文案故事,在下方提供了便于理解的另一题面版本.扶苏被画师和锦鲤的

模拟赛T2腐草为萤

2.腐草为萤(dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼嫩的新叶,我们约定这棵树的根是1,每个节点都代表树上的一个叶子.如果你不知道什么叫树,你可以认为树是一个边数比节点个数少1 的无向连通图.我们如果约定节点u 是树T 的根,则可以定义一个节点v 到根的路径为该无向图上u, v两个节点之间的简单路径上的节点集合(包括路径的两个端点).可以证明,这样的简单路径只有

怀疑与学问 作者:顾颉刚

「学者先要会疑.」 — —程颐.      「在可疑而不疑者,不曾学:学则须疑.」 — —张载        学问的基础是事实和证据.  事实和证据的来源有两种:一种是自己亲眼看见的,一种是听别人传说的. 譬如在国难危急的时候,各地一定有许多口头的消息,说得如何凶险,那便是别人的传说,不一定可靠.  要知道实际的情形,只有靠己亲自去观察.  做学问也是这样,最要紧最可靠的材料是自己亲见的事实证据:但这种证据有时候不能亲自见到,便只能靠别人的传说了.      我们对於传说的话,不论信不信,都应当

校内题目锦鲤抄

v> 3.锦鲤抄 (zay.cpp/c) [题目背景] 你在尘世中辗转了千百年 却只让我看你最后一眼 火光描摹容颜燃尽了时间 别留我一人,孑然一身 凋零在梦境里面. ——银临&云の泣<锦鲤抄> [问题描述] 这首歌的文案讲述了这样一个故事: 在一个兵荒马乱的年代,有一位画师叫浅溪,非常喜欢画锦鲤.战火烧到了泰 安,他的邻居都惊慌逃命,只有他不舍得池中锦鲤没有离开.这天晚上庭院失火, 池中的锦鲤化妖,用生命护住了画师的平安. 注意:由于本题题面涉及到文案故事,在下方提供了便于理解的

[JZOJ1901] 【2010集训队出题】光棱坦克

题目 题目大意 给你个平面上的一堆点,问序列\({p_i}\)的个数. 满足\(y_{p_{i-1}}>y_{p_i}\)并且\(x_{p_i}\)在\(x_{p_i-1}\)和\(x_{p_i-2}\)之间. 正解 我不知道为什么我的树状数组打挂了--尽管不一定能AC,但是WA了-- 这题的正解有很多,最为传奇的,则是彭大爷的神仙解法. 显然这是个DP,而他抛弃了按照\(y\)从大到小排序的传统做法,反而是以\(x\)从小到大排序.将\({p_i}\)倒过来做.设\(f_{i,0/1}\)表示

冬令营2015 酱油记

Day0: 首先是报到,然后发现浙大寝室没网...又木有熟悉的学长可以借个账号,所以就去老师的宾馆蹭网络,做了道USACO的题,看了点论文就到晚饭时间了.晚上是开营仪式,各种发言什么的,还见到了传说中的金策大神.(话说学军的大神们都穿着校服,弘扬校威...)然后是看表演,浙江人多,所以位置单独在二楼,空调热的要死,然后发现坐在我边上的刚好是和我同寝室的王希豪(温岭中学).所以结束之后我们一起回寝室,认识了其他2个室友,一个是瑞安中学的郑立言,还有一个非常神的金牌爷张浩威.然后就混熟了,由于我们学

心情--2014区域赛

2014-11-24 14:09:51 事已至此,也没什么话好讲了. 北京.广州两铁. 耻辱,不甘,无名怒火,却生不起气来. 甚至有些麻木 , 有些呆滞 , 面无表情. 怎么说呢,真的是一种有心无力,咬紧嘴唇但无能为力,皱紧眉头却难挽狂澜的绞痛. Beijing regional: 北京和苏州一样冷,比赛那周发了烧,幸好比赛前好的差不多了. BNU的校园很赞,比赛环境已是我见过的最好的了,包括桌椅和发的食品. 这些我都不怎么关心,毕竟不是强队,不能像他们一样学富五车怀着轻松的心情出来做个“训练”

【基本操作】树上启发式合并の详解

树上启发式合并是某些神仙题目的常见操作. 这里有一个讲得详细一点的,不过为了深刻记忆,我还是再给自己讲一遍吧! DSU(Disjoint Set Union),别看英文名挺高级,其实它就是并查集…… DSU on tree,也就是树上的启发式合并(众所周知,并查集最重要的优化就是启发式合并). 然后咱们来考虑一个基础题:给出一棵树,每个节点有颜色,询问一些子树中不同的颜色数量(颜色可重复).祖传数据($100000$). 当然,这道题可以被各种方法切,比如带修莫队(做法自行百度). 但莫队的时空

Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学了啊...数学比例\(\frac{16}{33}=0.4848\) orz yhx-12243神仙 题目链接: https://codeforces.com/contest/947/problem/E 题意: 有一个\([0,n]\)的随机数\(x\)初始为\(i\)的概率为\(p_i\). \(m