Codeforces Round #838 (Div. 2) E. Tree Sum(组合数学 prufer序列 枚举边算贡献)

news2024/10/3 8:22:33

题目

n(n<=5e5)个点的树,边只能选-1或1,

若对于每个点i来说,i相连的所有边的乘积值为-1,则称这棵树是「good tree」

根据Cayley公式,有n^{n-2}种树形,

对于每一种树形,每条边都有2种选择,共n^{n-2}*2^{n-1}种树,

在这些树中,求所有「good tree」的d(1,n)之和,

其中,d(1,n)为1到n的路径上的边的权值之和

答案对998244353取模

思路来源

kimoyami、uoj群

心得

首先,手玩可以发现,n为奇数的时候无解,答案为0

n为偶数,注意到,对于一棵确定的树形,安边方式是唯一的

然后,我想到了这个题,

2020牛客暑期多校训练营(第十场)C.Decrement on the Tree(贪心/树上一条链减1使所有链为0的最小操作次数)_Code92007的博客-CSDN博客

在一开始都没赋权值的时候,

等价于每次你可以选两个点u,v,将u,v路径上的边都乘以-1,

边权转化为点权,就是u-w-v上的w点被乘了两次-1,相当于没变,而u和v都被乘了-1,

最后要求所有点的点权都为-1,显然可以两两兑掉,

对于一棵确定的树,兑掉的方式不影响局面的值,一定有解

甚至还推出了一个奇怪的结论,

如果固定1到n的路径长度,相当于1和n是两个叶子节点,即两个奇度点,

那么,计1到n上的路径(不含1和n)上的奇数点的数量为x,则这棵树的贡献等于-x-1

然后就不会了

题解

n为偶数时,考虑有贡献的边即可,钦定1和n在这条边的左右两侧,

枚举左侧有多少点,统计在多少树形里面能出现这条边

引理:当左右两侧都为奇数个点时,中间这条边为-1;都为偶数个点时,为1

剩下的就是组合数计算了,枚举有1的这一侧有i个点,

1. C(n-2,i-1),先从剩下n-2个点里选i-1个点出来放在1这侧,剩下的点自然就在n那侧了

2. 1这侧,一棵i个点的独立的树,乘以tree(i)

3. n这侧,一棵n-i个点的独立的树,乘以tree(n-i)

4. 中间这条边挑左侧的一个点,i种方案,挑右侧的一个点,n-i种方案,接在一起,i*(n-i)

其中,tree(i)即i个点的无根树的方案数,由Cayley公式,i的i-2次方

奇数答案为0,恰好能和这种写法统一,因为i和n-i的奇偶性不同,答案恰好互为相反数

引理的理解方式:

1. 可以用上面的心得来理解,即若一侧的点为奇数个,另一侧也为奇数个

两两兑掉后必还剩一个点,与另一侧的点相连时,使中间这条边为-1

2. (来自uoj群)自底向上归纳法:

考虑固定树的结构后,边权是唯一确定的(自底向上归纳),

钦定一个非叶节点为根,考虑这个归纳的过程,

发现当且仅当n是偶数且自底向上迭代到根时,根有恰好奇数个相邻的-1,

然后考虑枚举1,n路径上的边,对于一条边(u,v),

当且仅当断掉后裂开的两个连通块大小都是奇数时,(u,v)固定的权值是1

自己的补充说明:

这是因为,考虑裂开的以u为根的连通块,

当纳入(u,v)这条边和v这个点时,连通块内点数恰好为偶数,对称侧同理考虑

代码

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int N=5e5+10,mod=998244353;
int n,ans,fac[N],finv[N];
int modpow(int x,int n,int mod){
    int res=1;
    for(;n;n>>=1,x=1ll*x*x%mod){
        if(n&1)res=1ll*res*x%mod;
    }
    return res;
}
int C(int n,int m){
    if(n<0 || m<0 || n<m)return 0;
    return 1ll*fac[n]*finv[m]%mod*finv[n-m]%mod;
}
int tree(int x){
    if(x==1)return x;
    return modpow(x,x-2,mod);
}
int main(){
    cin>>n;
    fac[0]=fac[1]=finv[0]=finv[1]=1;
    for(int i=2;i<=n;++i){
        finv[i]=1ll*(mod-mod/i)*finv[mod%i]%mod;
    }
    for(int i=2;i<=n;++i){
        fac[i]=1ll*i*fac[i-1]%mod;
        finv[i]=1ll*finv[i]*finv[i-1]%mod;
    }
    for(int i=1;i<n;++i){
        int v=1ll*C(n-2,i-1)*tree(i)%mod*tree(n-i)%mod*i%mod*(n-i)%mod;
        int sg=(i&1)?-1:1;
        ans=(ans+sg*v)%mod;
        ans=(ans+mod)%mod;
    }
    cout<<ans<<endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是飞书机器人?如何定时发送飞书机器人消息?

什么是飞书机器人&#xff1f; 机器人是飞书应用的一种能力类型。基于飞书的机器人能力&#xff0c;开发者能够以较低的开发成本&#xff08;只需在服务端开发&#xff09;&#xff0c;实现在飞书单聊或群组中的消息推送和简单互动&#xff0c;完成企业系统数据与飞书的互联互通…

42_CAN列表模式接收中断实验

目录 CAN结构体 CAN_InitTypeDef初始化结构体详解 发送及接收结构体: CanTxMsg及CanRxMsg详解 CAN_FilterlnitTypeDef筛选器结构体讲解 硬件连接图 实验源码 CAN结构体 从STM32的CAN外设我们了解到它的功能非常多,控制涉及的寄存器也非常丰富,而使用STM32标准库提供的各…

pandas数据分析总结

Pandas 是 Python 语言的一个扩展程序库&#xff0c;用于数据分析。其中DataFrame&#xff0c;Json&#xff0c;数据筛选的使用频次很高&#xff0c;值得重点将基本用法学习并总结。 版本信息&#xff1a;python 3.7 pandas 1.3.5 一、DataFrame DataFrame 是一个表格型的数…

【持续更新】计算机类PDF整理

计算机相关的书籍太多太多了&#xff0c;整理太多反而很乱&#xff0c;这边我根据自己的经验和理解选了一些典型的书籍&#xff0c;大部分是自己看过觉得很有用的&#xff0c;有些是听说很nice的&#xff0c;有些是经典的&#xff0c;大家可以自行下载。 持续更新中&#xff0…

Kaggle竞赛——Titanic泰坦尼克之灾(0.76315==>0.79186)

Kaggle竞赛网址&#xff1a;https://www.kaggle.com/c/titanic 上一章&#xff1a;Kaggle竞赛——Titanic泰坦尼克之灾&#xff08;保姆级基础版&#xff09; 本次Kaggle泰坦尼克之灾分析过程大致分为&#xff1a; 第1步&#xff1a;了解数据&#xff08;上一章&#xff09; …

19_SpringBoot拓展注解@SpringBootApplication和@Configuration

文章目录Spring Boot拓展注解SpringBootApplication和Configuration0x01_SpringBootApplicationSpringBootConfigurationEnableAutoConfigurationComponentScan0x02_ConfigurationFull 全模式&#xff0c;Lite 轻量级模式Spring Boot拓展注解SpringBootApplication和Configurat…

计算机网络原理 课后习题(作业)持续更新ing

【1-03 】试从多个方面比较电路交换、报文交换和分组交换的主要优缺点 &#xff08;1&#xff09;电路交换的主要特点: ①电路交换三个阶段&#xff1a;建立连接、通信、释放连接&#xff1b; ②在整个通信过程中&#xff0c;通信的双方自始至终占用着所使用的物理信道。 由…

多线程知识笔记(五)_单例模式

文章目录1、什么是单例模式2、饿汉模式3、懒汉模式1、什么是单例模式 单例模式是一种设计模式。 什么是设计模式呢&#xff1f;设计模式就是一种模板&#xff0c;就像做饭的时候&#xff0c;新手做饭什么调料都是一把放进锅里&#xff0c;有的菜就讲究调料的先后顺序&#xff…

Java web 2022跟学尚硅谷(十一) Vue基础和Axios基础和json基础

Java web 2022跟学尚硅谷十一后端基础 书城Vue在js中定义对象的2种方式方式一方式二简单的Vue代码绑定元素的属性方式一 v-bind:value方式二 :value双向数据绑定 v-model:方式一方式二 :value可以省略&#xff0c;trim去除首尾空格条件渲染 v-if条件渲染 v-else条件渲染 特别注…

[附源码]Python计算机毕业设计高校医务管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

极地土活性层和永久冻土的比较宏基因组学

北极地区有大约87%由低有机碳矿物土壤组成&#xff0c;但对低碳永久冻土&#xff08;PF&#xff09;和活性层&#xff08;AL&#xff09;土壤中微生物活性的了解仍然有限。多种物理和生物因素可能影响碳循环&#xff0c;包括土壤化学、氮等养分的可用性以及现有微生物群落的结构…

论文解析[9] Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

发表时间&#xff1a;2021 论文地址&#xff1a;https://arxiv.org/abs/2103.14030 代码地址&#xff1a;https://github.com/microsoft/Swin-Transformer 文章目录摘要3 方法3.1 总体框架3.2 基于自注意力的移动窗口3.3 结构变形5 结论摘要 这篇论文提出了一个新的ViT叫作Swi…

大数据培训kettle安装部署

kettle安装部署和使用 2.1 kettle安装地址 官网地址 https://community.hitachivantara.com/docs/DOC-1009855 下载地址 https://sourceforge.net/projects/pentaho/files/Data%20Integration/ 2.2 Windows下安装使用 2.2.1 概述 在实际企业开发中&#xff0c;都是在本…

Html 小功能总结二

文章目录一、Html 实现弹窗的实例二、Html 实现流程图三、制作一个简单的菜单功能一、Html 实现弹窗的实例 <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title></title><style type"text/css">body…

C++ Reference: Standard C++ Library reference: Containers: map: map: crbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/crbegin/ 公有成员函数 <map> std::map::crbegin const_reverse_iterator crbegin() const noexcept;返回指向反向开始的const_reverse_iterator 返回一个指向容器中最后一个元素的const_reverse_ite…

Nacos 消息通知系统 源码讲解

目录 1. 介绍 2. Nacos 中的生产者 3. Nacos 中的消费者 4. Nacos 中的事件 5. 统一事件通知中心 NotifyCenter 6. 总结 1. 介绍 Nacos 节点内部使用了大量的事件机制进行通信&#xff0c;这样各种操作进行了解耦&#xff0c;提高了性能。 接下来就介绍。 所谓事件机制…

virtualenv系列 (5) · 打通virtualenvwrapper和PyCharm/IntelliJ IDEA的虚拟环境

PyCharm/IntelliJ IDEA已经内置了对virtualenv的支持&#xff0c;当我们为一个项目创建一个新的Python SDK时&#xff0c;就会进入到Add Python Interpreter对话框&#xff0c;选择Virtualenv Environment -> New environment就将创建一套新的virtualenv环境。这里&#xff…

关于长三角某高校能效管理平台应用成效探讨

更多请关注&#xff1a;安科瑞电气网 摘要&#xff1a; 随着现代科学技术的发展&#xff0c;在高校中开始广泛应用智能化技术&#xff0c;改善学生宿舍的用电管理模式&#xff0c;提高宿舍的管理水平&#xff0c;有利于实现高校宿舍用电管理的科学化。本文主要阐述传统高校宿…

D2. Seating Arrangements (hard version)(贪心+排序)

Problem - 1566D2 - Codeforces 这是该问题的困难版本。唯一的区别是&#xff0c;在这个版本中&#xff0c;1≤n≤300。 电影院的座位可以表示为有n行和m列的表格。每行的座位都用1到n的整数编号&#xff0c;从左到右连续编号&#xff1a;在第k行&#xff0c;从m(k-1)1到mk&am…

前端的视角聊聊如何快速入门Python

对于 NodeJs 开发的小伙伴&#xff0c;使用 node-gyp 将 C 模块转换成 NodeJs 的 addon 插件时会依赖 Python 的安装环境&#xff08;针对使用了 nvm 等版本管理工具的情况&#xff09;。对于前端小伙伴来说&#xff0c;Python 本身确实不是一个必须学习的语言&#xff0c;但也…