整体思想以及取模

devtools/2024/9/23 14:35:37/

前言:一开始由于失误,误以为分数相加取模不能,但是其实是可以取模的

这个题目如果按照一般方法,到达每个节点再进行概率统计,但是不知道为什么只过了百分之十五的测试集


题目地址
在这里插入图片描述

附上没过关的代码

#include<bits/stdc++.h>
using namespace std;#define int long longint n; int ans = 0;
const int N = (int)2e6 + 5;
const int Mod = 998244353;
int e[N], ne[N], h[N / 2], idx = 0;
void add(int a, int b) {e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}int qw(int x, int p) {int temp = 1;while (p) {if(p&1)temp = x * temp % Mod;x = x * x % Mod;p >>= 1;}return temp;
}void dfs(int u, int fa, int g, int step) {int cnt = 0;for (int i = h[u]; i; i = ne[i]) {int v = e[i]; if (fa == v) continue;cnt++;}if (cnt == 0) {// 已经是子节点了 //ans = (ans + (step % Mod) * qw(g, Mod - 2)) % Mod; return;ans = (ans + step*g%Mod) % Mod; return;}g = (g % Mod) * (qw(cnt, Mod - 2) % Mod) % Mod;for (int i = h[u]; i; i = ne[i]) {int v = e[i]; if (fa == v) continue;dfs(v, u, g , step + 1);}
}signed main() {cin >> n;for(int i=1;i<n;i++){int u,v; cin >> u >> v;add(u,v),add(v,u);}if(n==1){cout << 0 ; return 0;}dfs(1,0,1,0);cout << ans;return 0;
}

再写一个过关的,按照官方答案的解法的

#include<bits/stdc++.h>
using namespace std;#define int long longint n; int ans = 0;
const int N = (int)2e6 + 5;
const int Mod = 998244353;
const int P = 998244353;
int e[N], ne[N], h[N / 2], idx = 0;
vector<int> a[N / 2];
int siz[N], ye[N]; // 记录每一层的节点个数以及叶子节点的个数 
void add(int a, int b) {e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}int qw(int x, int p) {int temp = 1;while (p) {if (p & 1)temp = x * temp % Mod;x = x * x % Mod;p >>= 1;}return temp;
}void dfs(int u, int fa, int dep) {int cnt = 0; siz[dep]++;for (int i = h[u]; i; i = ne[i]) {int to = e[i]; if (to == fa) continue;cnt++; dfs(to, u, dep + 1);}if (cnt == 0) {ye[dep]++;}
}void solve() {int pre = 1; // 概率for (int i = 1; i < n; i++) {//cout << " siz " << i << " " << ye[i] << endl;if (siz[i] == 0) break;//ans = (ans+(pre*(ye[i]*(qw(siz[i],Mod-2),Mod-2)%Mod)%Mod) * (i)%Mod) % Mod;ans = (ans + pre * ye[i] % P * qw(siz[i], P - 2) % P * (i) % P) % P;pre = pre * ((siz[i] - ye[i]) * (qw(siz[i], Mod - 2)) % Mod)%Mod;//pre = pre * (((siz[i] - ye[i]) % P + P) % P) % P * qw(siz[i], P - 2) % P;}cout << ans; return;
}signed main() {cin >> n;for (int i = 1; i < n; i++) {int u, v; cin >> u >> v;add(u, v), add(v, u);//a[u].push_back(v); a[v].push_back(u);}if (n == 1) {cout << 0; return 0;}dfs(1, 0, 0);solve();return 0;
}

http://www.ppmy.cn/devtools/97807.html

相关文章

考研交流平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据库参…

CSS知识点详解:div盒子模型

盒子模型&#xff1a; 边框&#xff1a; border-color&#xff1a;边框颜色 border-width&#xff1a;边框粗细 1.thin 2.medium 3.thick 4.像素值 border-width:5px ; border-width:20px 2px; border-width:5px 1px 6px; border-width:1px 3px 5px 2px; 这个简写属性…

【STM32 FreeRTOS】信号量与互斥锁

二值信号量 二值信号量的本质是一个队列长度为1的队列&#xff0c;该队列就只有空和满两种情况&#xff0c;这就是二值。 二值信号量通常用于互斥访问或任务同步&#xff0c;与互斥信号量比较类似&#xff0c;但是二值信号量有可能会导致优先级翻转的问题&#xff0c;所以二值…

湖州网站建设快速建站

在当今信息化时代&#xff0c;网站的建设已成为企业和个人展示形象、传播信息的重要途径。湖州作为一个历史悠久、文化底蕴深厚的城市&#xff0c;发展迅速&#xff0c;涌现出许多需要快速建立网站的企业和个人。本文将探讨湖州网站建设的快速建站方案。 首先&#xff0c;快速建…

http request-01-XMLHttpRequest XHR 标准

http 请求系列 http request-01-XMLHttpRequest XHR 简单介绍 http request-01-XMLHttpRequest XHR 标准 Ajax 详解-01-AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;入门介绍 Ajax XHR 的替代方案-fetch Ajax XHR 的替代方案-fetch 标准 Ajax 的替代方案…

【CAN-IDPS】汽车网关信息安全要求以及实验方法

《汽车网关信息安全技术要求及试验方法》是中国的一项国家标准,编号为GB/T 40857-2021,于2021年10月11日发布,并从2022年5月1日起开始实施 。这项标准由全国汽车标准化技术委员会(TC114)归口,智能网联汽车分会(TC114SC34)执行,主管部门为工业和信息化部。 该标准主要…

go 系列之 once

一、简介 once 方法用于保证指定函数只执行一次。例如配置懒加载&#xff0c;客户端获取密钥等场景&#xff0c;都可以用到once。 二、技术实现 2.1 Once.go type Once struct {done atomic.Uint32m Mutex }func (o *Once) Do(f func()) {if o.done.Load() 0 {o.doSlow(…

使用哪种方式可以将 MATLAB 算法转换到FPGA中运行?

FPGA在进行相关算法计算时&#xff0c;一般都会使用高级语言进行算法验证&#xff0c;目前比较常见的就是 MATLAB &#xff0c;那么使用哪种方式可以将MATLAB中实现的算哒转换到FPGA中&#xff1f; 目前可以通过多种方式在 FPGA 中实现算法。 Simulink HDL Coder MathWorks 提供…