首页 > 其他分享 >P8973 『GROI-R1』 继续深潜,为了同一个梦想

P8973 『GROI-R1』 继续深潜,为了同一个梦想

时间:2023-10-15 16:45:09浏览次数:32  
标签:GROI R1 sum son ans P8973

P8973 『GROI-R1』 继续深潜,为了同一个梦想

P8973 『GROI-R1』 继续深潜,为了同一个梦想 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

目录

题目大意

我称一棵树上的一个点集是“连接的”,当且仅当树上存在一条链能够覆盖这个点集并且这个集合大小不小于 2

对于每个点,询问每个点被多少个这样的点集所包含

设 \(ans_i\) 为包含 \(i\) 号节点的连接的集合的个数对 \(10^9+7\) 取模后的值

输出 \(xor_{i = 1}^n ans_i * i\)

思路

换根 \(dp\)

设 \(f_r(x)\) 为以 \(r\) 为根时,以 \(x\) 为一个端点,在 \(x\) 的子树里面选 \(\ge1\) 个点,满足这些点在同一条链上面的方案数。

那么:

\[f_r(x) = \sum_{u\in son(x)} f_r(u) * 2 + 1 \]

因为 \(u\) 点可以选也可以不选,并且可以选 \(\{u , x\}\) 。

我算出所有 \(f\) 后考虑以 \(r\) 为根时的答案 \(ans_r\) ,设 \(g_r(u) = f_r(u) * 2 + 1\)

其实就是 \(f_r(r)\) 加上两条链连起来的总和。

那么:

\[ans_r = \sum_{u , v \in son(r) , u \neq v} g_r(u) * g_r(v) + \sum _{u \in son(r)} g_r(u) \]

设 \(s_r = \sum_{u \in son(r)} g_r(u)\)

那么:

\[ans_r = \sum_{u\in son(r)} g_r(u) * (s_r - g_r(u) + 1) \]

实现的时候两条链组成一条新的链时不要多加了

接下来考虑换根, \(u\to v\) 换根,考虑 \(f\) 的变化

\[f_v(u) =f_u(u) - (f_u(v) * 2 + 1) \newline f_v(v) = f_u(v) +f_v(u) * 2 +1 \]

其他的点 \(x\) 就是 \(f_v(x) = f_u(x)\)

code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define LL long long
using namespace std;
const int N = 5e5 + 5;
const LL mod = 1e9 + 7;
int hd[N] , cnt , n , fa[N];
LL f[N] , ans[N];
struct E {
    int to , nt;
} e[N << 1];
void add (int x , int y) { e[++cnt].to = y , e[cnt].nt = hd[x] , hd[x] = cnt; }
void dfs1 (int x) {
    int y;
    for (int i = hd[x] ; i ; i = e[i].nt) {
        y = e[i].to;
        if (y == fa[x]) continue;
        fa[y] = x;
        dfs1 (y);
        f[x] = (f[x] + f[y] * 2 % mod + 1) % mod;
    }
}
void dfs2 (int x) {
    int y;
    LL sum = 0;
    for (int i = hd[x] ; i ; i = e[i].nt) {
        y = e[i].to;
        sum = (sum + 2 * f[y] % mod + 1) % mod;
    }
    LL g;
    for (int i = hd[x] ; i ; i = e[i].nt) {
        y = e[i].to;
        g = (f[y] * 2 % mod + 1) % mod;
        ans[x] = (ans[x] + g * ((sum - g + mod + 1) % mod) % mod) % mod;
        sum = (sum - g + mod) % mod;
    }
    LL xx , yy;
    for (int i = hd[x] ; i ; i = e[i].nt) {
        y = e[i].to;
        if (y == fa[x]) continue;
        xx = f[x] , yy = f[y];
        f[x] = (xx + mod - (yy * 2 % mod + 1) % mod) % mod;
        f[y] = (yy + f[x] * 2 % mod + 1) % mod;
        dfs2 (y);
        f[x] = xx , f[y] = yy;
    }
}
int main () {
    int u , v;
    scanf ("%d" , &n);
    fu (i , 1 , n - 1) {
        scanf ("%d%d" , &u , &v);
        add (u , v) , add (v , u);
    }
    dfs1 (1);
    dfs2 (1);
    LL ans1 = ans[1] * 1;
    fu (i , 2 , n) ans1 = ans1 ^ (ans[i] * i);
    printf ("%lld" , ans1);
    return 0;
}

标签:GROI,R1,sum,son,ans,P8973
From: https://www.cnblogs.com/2020fengziyang/p/17765779.html

相关文章

  • Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误
    问题:LR产品,录制http://www.gw.com.cn/网页时提示下图错误,这是为什么呢?请在如下recordingoptions中选择正确的SSL版本,再进行录制。注:如何确定那个SSL版本是正确的呢?答:需要与网站这边进行确认,问他们网站使用的SSL版本是多少? ......
  • Loadrunner12 在谷歌浏览器录制https协议的脚本时,提示不是私密链接-解决办法
    在谷歌浏览器下,录制https协议网址的脚本时,会出现如下提示:   接下来,教大家一招黑操作: 1、鼠标点击屏幕,聚焦在当前页面2、输入thisisunsafe,点击回车,奇迹的事情发生了,可以打开https协议的网页正常录制了!!!   3、接下来就根据你的测试需求,来进行操作。(只要提示不是私密......
  • 全志R128芯片 基础组件开发指南——RTOS 多媒体编码
    RTOS多媒体编码介绍FreeRTOS下如何使用xrecorder的接口来开发录制应用程序,方便录制应用开发人员快速正确地开发,以及录制应用测试人员如何根据该文档对基于xrecord的录制应用进行验证测试。编码支持情况目前RTOS平台多媒体编码应用支持的编码格式分别为:pcm、amr、mp3、s......
  • ddddocr1.4.8失效的解决方法
    1.问题描述fromseleniumimportwebdriverfromtimeimportsleepdriver=webdriver.Chrome()driver.maximize_window()driver.get('http://124.223.30.31:xxxx/forum.php')driver.find_element('id','ls_username').send_keys('admi......
  • P9712 「QFOI R1」贴贴 の 题解
    这道题比较典型。大概就是你先输出solution-,之后再处理其他的。之后遍历字符串,如果发现是大写,就给转成小写,之后输出,如果发现是减号,就输出字符串,都不是就直接输出该字符串的第\(i\)个字符。#include<iostream>#include<string>usingnamespacestd;strings;intlen;int......
  • After_Effects_2023_23.5.0.52_ACR15.4图文安装教程及下载
     AdobeAfterEffects(爱国版、一键式安装、永久使用)简称“AE”是Adobe公司推出的一款图形视频处理软件,适用于从事设计和视频特技的机构,包括电视台、动画制作公司、个人后期制作工作室以及多媒体工作室。AdobeAfterEffects软件可以帮助您高效且精确地创建无数种引人注目的动态......
  • 随想录Day8|344. 反转字符串、541. 反转字符串Ⅱ、LCR 122. 路径加密、151. 反转字符
    随想录Day8|344.反转字符串、541.反转字符串Ⅱ、LCR122.路径加密、151.反转字符串里的单词、LCR182.动态口令 题目越来越长了…… 344.反转字符串文章&视频讲解编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数......
  • SR10200肖特基整流二极管 杭州东沃 原厂厂家
    近日,前来东沃电子咨询肖特基二极管的客户特别地多起来了:SS315LB肖特基二极管,有生产的吗?DO-27封装肖特基二极管,贵司有哪些型号?反向电压200V的直插肖特基二极管,有哪些常用型号?SR10200二极管200V10ADO-27封装,需要200K,什么价格?交期多久?……肖特基二极管有直插和贴片之分,直插封装形式......
  • 攻防世界MISC练习题[中等] QR1
    下载附件得到一张空白的图片直接打开放大后发现有很多黑点,观察其的分布位置看起来像是二维码因为全是小黑点的分布也不能直接扫描出来,拿去KALI看一下。虚拟鸡启动!binwalk没内容zstegnothing。现在想起来题目是QR,在想会不会是和二维码有关,决定再去看看图片。放大图片后......
  • msvcr100.dll丢失怎么办?
    方法三:重新安装VisualC++2010RedistributablePackage只需要重新安装MicrosoftVisualC++2010RedistributablePackage即可。你可以从微软官方网站下载最新版本的安装包,然后按照提示进行安装。需要注意的是,这个方法只适用于已经安装了VisualC++2010的开发环境的用户。......