首页 > 其他分享 >L. A Game On Tree

L. A Game On Tree

时间:2024-11-01 16:35:13浏览次数:2  
标签:return int sum Tree long v1 Game mod

  • 应该坚持问题导向
  • 你的思维疏漏之处在于,忽略了“乙烯型”的情况
  • 本题其实并不是真正的数学期望型题目,因为可以通过除上\((\frac{n(n-1)}{2})^2\)将问题转化为统计所有公共路径长度的平方和
  • 考虑拆贡献。设公共边为e1,e2,...,ek,\((|e1|+|e2|+...+|ek|)^2\)
  • 分类讨论。|ei|产生的贡献:\([s[u]*(n-s[u])]^2\)
  • |ei||ej|产生的贡献:
  • 考虑在LCA处统计。考虑通过分类讨论增加条件
  • 考虑按两条边是否位于LCA的同一子树分支分类讨论。为什么呢?因为这决定了是否可能自顶向下构造方案
  • 如果是不同子树分支,那答案就是\((s[v1]*s[v2])^2\),整合答案:sum[v1]*sum[v2]
  • 如果是相同子树分支,则其中必定有一条边为(LCA,v1),答案为\(((n-s[v1])*s[v2])^2\),整合答案:\((n-s[v1])^2(sum[v1]-s[v1]^2)\)
  • 注意别漏掉了完全平方公式的“2”了
点击查看代码
#include <bits/stdc++.h>
using namespace std;
vector<int>a[100005];
long long n,s[100005],sum[100005],ans;
const int mod=998244353;
int power(int n,int p)
{
	if(p==0)
	{
		return 1;
	}
	long long tmp=power(n,p/2);
	if(p%2==1)
	{
		return tmp*tmp%mod*n%mod;
	}
	return tmp*tmp%mod;
}
void dfs(int n1,int fa)
{
	s[n1]=1;
	sum[n1]=0;
	for(int i=0;i<a[n1].size();i++)
	{
		if(a[n1][i]!=fa)
		{
			dfs(a[n1][i],n1);
			s[n1]+=s[a[n1][i]];
			ans=(ans+2*sum[a[n1][i]]*sum[n1]%mod)%mod;
			(sum[n1]+=sum[a[n1][i]])%=mod;
			ans=(ans+2*(n-s[a[n1][i]])*(n-s[a[n1][i]])%mod*(sum[a[n1][i]]-s[a[n1][i]]*s[a[n1][i]]%mod)%mod)%mod;
		}
	}
	(sum[n1]+=(s[n1]*s[n1]%mod))%=mod;
	if(fa)
	{
		ans=(ans+s[n1]*s[n1]%mod*(n-s[n1])%mod*(n-s[n1])%mod)%mod;
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		long long cnt,cntinv;
		cin>>n;
		cnt=n*(n-1)/2%mod;
		cntinv=power(cnt*cnt%mod,998244351);
		for(int i=1;i<=n;i++)
		{
			a[i].clear();
		}
		for(int i=1;i<n;i++)
		{
			int u,v;
			cin>>u>>v;
			a[u].push_back(v);
			a[v].push_back(u);
		}
		ans=0;
		dfs(1,0);
		cout<<(ans+mod)%mod*cntinv%mod<<endl;
	}
	return 0;
}

标签:return,int,sum,Tree,long,v1,Game,mod
From: https://www.cnblogs.com/watersail/p/18520409

相关文章

  • C语言数据结构之二叉树(BINARY TREE)链式存贮的简单实现
    C语言数据结构之二叉树(BINARYTREE)链式存贮的简单实现树型数据结构在应用中非常多,效率也非常好,只是结构相对复杂,理解起来有点儿难度!!!定义数据结构typedefstruct_BTreeNodeBTreeNode;struct_BTreeNode{intval;BTreeNode*lchild,*rchild;};自定义结构体数......
  • SS241031C. 博弈(game)
    SS241031C.博弈(game)题意博弈的规则是,有\(3\)个数字\(x,y,z\),每次可以选择其中两个数字\(x,y\),改成\(x',y'\),满足和不变差严格变小,即\(x+y=x'+y',|x-y|>|x'-y'|\)。无法操作的失败。给你\(n\)个数字,问有多少种选\(3\)个数字的方案使得先手必胜。solution首先可以设......
  • 0xgame 2024
    做不过来了,就跟着做了一点第一周####ez_sstifromflaskimportFlask,request,render_template,render_template_stringimportosapp=Flask(__name__)flag=os.getenv("flag")os.unsetenv("flag")@app.route('/')defindex():returnopen......
  • Shooter Game User Interface Starter
    射击游戏用户界面工具包这个工具包为射击游戏开发者提供了一套完整的UnityUI布局屏幕和预制件,旨在加速游戏界面的开发过程。以下是工具包的核心特性:屏幕布局:包含9个完整的UnityUI布局屏幕,覆盖装备、选项、游戏模式、大厅、社交、装备详情、登录、设置等多个游戏界面。......
  • Delphi10.3中的TreeView1的使用说明
    mySQL数据库中,所有的DataBase及其对应的Tables;最终效果: 先在设计窗口,新建根结点 再添加层级为Level1级的数据库名DataBases;varRootNode,DBNodes:TTreeNode;//先建立一个TREEVIEW使用的结点对象beginFDQuery1.Active:=false;FDQuery1.SQL.Text:='S......
  • 闯关leetcode——222. Count Complete Tree Nodes
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/count-complete-tree-nodes/description/内容Giventherootofacompletebinarytree,returnthenumberofthenodesinthetree.AccordingtoWikipedia,everylevel,exceptpos......
  • 0xGame2024-week3-crypto
    CryptoLLL-IfromCrypto.Util.numberimportbytes_to_longfromnumpyimporteye,matrixfromrandomimportrandintfromsecretimportflagassertlen(flag)%4==0Length=len(flag)//4Noise=[[randint(1,pow(2,90))foriinrange(4)]forjinra......
  • Java进阶学习笔记54——HashMap、LinkedHashMap、TreeMap
    HashMap集合的底层原理:HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。实际上,原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。哈希表:1)JDK8之前,哈希表=数组+链表;2)JDK8开始,哈希表=数组+链表+红黑树;3)哈希表是......
  • Java中TreeSet的使用
    TreeSet的使用文章目录TreeSet的使用判断数据是否相同的标准添加String类型对象添加自定义类型对象定制排序底层数据结构:红黑树添加元素后的特点:可以按照添加的元素的指定的属性的大小顺序进行遍历添加元素的要求:添加到TreeSet的元素必须是同一个类型的对......
  • Pygame游戏手柄(Xbox)输入测试工具
    文章目录前言Xbox手柄测试程序说明使用说明完整代码前言在python做机器人控制时,需要加入xbox操控功能,为了直观显示手柄摇杆与变量之间的对应关系,实时调试手柄输入,开发了python手柄测试程序(本文基于xbox)。Xbox手柄测试程序说明测试程序使用pygame库创建了一......