首页 > 其他分享 >Codeforces Round #845 (Div. 2) D题解

Codeforces Round #845 (Div. 2) D题解

时间:2023-01-22 17:33:26浏览次数:59  
标签:845 int 题解 tot fa nex res Div 节点

D. Score of a Tree

题目链接:https://codeforces.com/contest/1777/problem/D
个人感觉还是比较简单的一道计数题
题意是给你一颗有n(n<=2e5)节点的树,初始时每个节点有一个值0/1,每过一个时刻值变为子节点的值的异或和,若无子节点则变为0,问对于所有初始情况,每一种情况的所有时刻的树上的点权和之和为多少。
容易发现,对于一个节点,当它为叶子节点时,其取值为1的情况有(1<<n)/2种;
对于多个子节点的节点,设子节点个数为k,则有∑\({k \choose 2i+1}\)种情况其下一时刻为1,易知此时即为(1<<(n-1))种情况在某一时刻(子节点尚未全变为0)其为1。经分析,答案即为每次取树的所有尚存在的节点,乘上(1<<(n-1))后加入答案中,再删掉所有叶子节点,所得即为答案。
上代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+10,M=2e6+10,mod=1e9+7;
int ver[M],h[N],nex[M],d[N],tot,f[N];
void al(int x,int y){
	ver[++tot]=y;
	nex[tot]=h[x];
	h[x]=tot;
}
int qpow(int x,int y){
	int res=1;
	while(y){
		if(y&1) res=res*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return res;
}
void dfs(int x,int fa){
	f[x]=fa;
	for(int i=h[x];i;i=nex[i]){
		int y=ver[i];
		if(y==fa) continue;
		dfs(y,x);
		d[x]=max(d[x],d[y]+1);
	}
	if(!d[x]) d[x]=1;
}
void solve(){
	int ans=0;
	int n;cin>>n;
	tot=0;
	for(int i=1;i<n;i++){
		int u,v;cin>>u>>v;
		al(u,v),al(v,u);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++){
		ans=(ans+d[i])%mod;
	}
	ans=ans*qpow(2,n-1)%mod;
	cout<<ans<<endl;
	for(int i=1;i<=n;i++){
		ver[i]=0,h[i]=0,nex[i]=0;
		d[i]=0;
		f[i]=0;
	}
}
signed main(){
	int T;cin>>T;
	while(T--) solve();
}

标签:845,int,题解,tot,fa,nex,res,Div,节点
From: https://www.cnblogs.com/wjhqwq/p/17064529.html

相关文章

  • 【题解】P4755 Beautiful Pair
    麻了,这么多典题没做过……思路分治/笛卡尔树。这一类和区间最值相关的区间端点对计数应该都可以用这种做法做。由于求的是最大值,不妨从大到小考虑每个\(a_i\)的贡......
  • 【题解】Codeforces Round #845 (Div. 2) and ByteRace 2023
    建议开题顺序:A->B->C->F->E->D诈骗差评,典题差评,想易写难数据结构差评。A.EverybodyLikesGoodArrays!好像是结论题,但是一力降十会。显然最后合并完后,每个......
  • B. Emordnilap【Codeforces Round #845 (Div. 2) and ByteRace 2023】
    B.Emordnilap原题链接Apermutationoflengthnisanarrayconsistingofndistinctintegersfrom1toninarbitraryorder.Forexample,[2,3,1,5,4]isape......
  • A. Everybody Likes Good Arrays!【Codeforces Round #845 (Div. 2) 】
    A.EverybodyLikesGoodArrays!原题链接Anarrayaisgoodifforallpairsofadjacentelements【相邻元素】,aiandai+1(1≤i<n)areofdifferentparity【奇......
  • P5030 题解
    前言题目传送门!更好的阅读体验?一道没啥意思的题目,但是好像很多题解都过不了现在的数据?思路只不过是把正常题目的马(\(1,2\))换成了另一种东西(\(1,3\))。很套路地,黑白......
  • 洛谷 P1123 取数游戏 (又是写了好久 最后还是无奈看了题解……)
    对于这个题感觉是一个比较典型的dfs.本题的状态是对于每个数字你可以选也可以不选,但是一旦你选定某个数字之后,他会对其周围的数字产生影响所以一定要标记好(注意这里标记的......
  • AT_abc286d 题解
    板子首先我们看到值域并不大。因此可以维护值域,跑完全背包。具体而言维护某一个值(小于\(10000\))是否能被凑出来,然后枚举物品种类以及物品数量即可。一般而言,完全背包......
  • AT_abc286e 题解
    首先观察到\(n\leq300\)加上全源“最短路”便可以自然而然的想到floyd。注意到floyd算法的可行性只依赖统计的东西具有优先级。这里我们定义优先级为最短路最短且......
  • ABC286 A-E题解
    题目虽然是大年三十,但是玩手机没写题有意思。从50分钟才开始看题。A题意:将数组中\([p,q]\)与\([r,s]\)的元素交换并输出。sbt。B大意:将字符中的na换成nya。......
  • AcWing 第87场周赛题解
    T1移动棋子算出为\(1\)的点离\((3,3)\)的距离即可。#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intmain(){int......