首页 > 其他分享 >Codeforces 1843D:Apple Tree

Codeforces 1843D:Apple Tree

时间:2023-08-05 19:55:12浏览次数:40  
标签:掉落 Apple int Tree Codeforces 苹果 ans 节点

1843D.Apple Tree


Description:

  • 一棵树( \(Tree\) 无环无重边 ) \(n\) 个节点,根节点为1(节点编号 \(1\)~\(n\)),树上只有2个苹果,每次摇动苹果树时,每个苹果会有如下变化:
    当前苹果位于节点 \(u\) :
    1.若节点 \(u\) 有子节点,则该苹果移动到此节点(若有多个子节点,则可以到任意一个)。
    2.若节点 \(u\) 没有字节点,则苹果掉落。
    很显然,有限次操作后,两个苹果都会掉落。
  • \(q\) 次提问,每次给出两个苹果的节点位置 \(x\) 和 \(y\) ,求解组合\((a,b)\)的数量,其中节点 \(a\) 为苹果 \(x\) 掉落的位置,节点 \(b\) 为苹果 \(y\) 掉落的位置。

Analysis:

  • 很显然,两个苹果为独立事件,苹果 \(x\) 的掉落可能位置数 \(ans\_x\)和相应的 \(ans\_y\),则总 \(pairs=ans\_x \times ans\_y\)
  • \(dfs\) 即可,注意答案的累加

Solution:

#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
const int maxn = 2e5+5;
 
vector<int> G[maxn];
ll ans[maxn];
int n;
 
void Build() { // 建树
	for(int i=1;i<=n;i++) {
		G[i].clear();
		ans[i] = 0;
	}
	cin >> n;
	for(int i=0;i<n-1;i++) {
		int u,v; cin >> u >> v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
}
 
void dfs(int v, int pre) {
	if(G[v].size() == 1 && G[v][0] == pre) { // 掉落位置
		ans[v] = 1;
		return;
	}
	
	for(auto nxt : G[v]) {
		if(nxt == pre) continue; // 不要往父节点走
		dfs(nxt,v);
		ans[v] += ans[nxt]; //遍历点v的所有子节点,累加到v上
	}
}
 
void solve() {
	int q; cin >> q;
	while(q--) {
		int x,y; cin >> x >> y;
		ll sum = ans[x]*ans[y];
		cout << sum << endl;
	}
}
 
int main() {
	int t; cin >> t;
	while(t--) {
		Build();
		dfs(1,-1);
		solve();
	}
	return 0;
}

标签:掉落,Apple,int,Tree,Codeforces,苹果,ans,节点
From: https://www.cnblogs.com/Trilliverse/p/17607713.html

相关文章

  • Educational Codeforces Round 151
    EducationalCodeforcesRound151T1就是大水题但写了很长时间。构造题。首先分类讨论:当\(x\ne1\)时我们构造的序列长度就为\(n\),序列就是\(n\)个\(1\)。当\(x=1\)时,当\(n\)为偶数,我们就枚举\(1\simk\)且\(i\nex\),只要\(n\)能整除\(i\),长度为\(......
  • Practice on Codeforces and Atcoder in August
    EducationalCodeforcesRound151A~ECodeforcesRound#879Div.2CodeforcesRound#882Div.2CodeforcesRound#873Div.2......
  • Educational Codeforces Round 151 (Rated for Div. 2) 题解
    A.ForbiddenInteger显然,当\(x\not=1\)时,直接输出\(n\)个\(1\)即可否则,如果\(n\)为奇数,那就输出\(\lfloor\frac{n}{2}\rfloor-1\)个\(2\)和\(3\);如果\(n\)为偶数,那就输出\(\frac{n}{2}\)个\(2\)(要看一下\(k\)的大小)B.ComeTogether因为Bob和Carol都......
  • P9369 [ICPC2022 Xi'an R] Tree
    我们可以发现每个点集要么是一个链,要么是不同子树中的许多点。那么显然,如果我们想要取一个链作为集合,那么只有把这个链一直取到叶子才是最优的。那么我们考虑把这棵树做长链剖分,假设我们得到了p条长链,每条长链的长度为lp_i。假设我们一开始全都用第二类集合来划分,那么答案显......
  • Codeforces Round 882 (Div. 2)
    link题号:CF1847A~FA题意:给定一个数组\(\{x_1,x_2,\cdots,x_n\}\)和一个整数\(k\),记\(f(l,r)=\sum_{i=0}^{i<r-l}|x_{l+i}-x_{l+i+1}|\),求将数组划分为\(k\)个部分的划分方案,使得对每个部分的\(f(l,r)\)之和最小.题解:简单题,首先我们注意到,如果将\(l,l+1\)隔开,那......
  • Codeforces Round 424 (Div. 1)D. Singer House
    传送门显然要自底向上进行\(dp\)深度相同的子树结构相同所以可以利用深度来代表子树。那么就应该统计出有向路径的个数。考虑路径由链所拼成。那么状态里应该有有向链的条数。设\(f_{i,j}\)表示深度为\(i\)链条数为\(j\)的方案数。不选当前的节点则\(f_{i,j}=f_{i+1,k}\cdot......
  • DXP TreeList 目录树
    DXPTreeList目录树1.需求背景需要一个支持勾选,拖动节点,保存各节点顺序的目录树。2.创建目录树在treeList控件中添加两个colunm用来显示绑定数据和显示值。接下来对treeList的属性进行设置//设置列不显示treeList.OptionsView.ShowColumns=......
  • Codeforces 1855B:Longest Divisors Interval 最长的连续约数区间
    1855B.LongestDivisorsIntervalDescription:对于一个整数\(n\)\((1\leqn\leq10^{18})\),找到一段最长的区间\([l,r]\),使得区间内所有数均为\(n\)的约数。Analysis:如果\(n\)是一个奇数(非\(2\)的倍数),由于\(odd=odd\timesodd\),则不可能有连续的两个整数均为......
  • Codeforces Round 449 (Div. 1) D. Nephren Runs a Cinema 卡特兰数
    luogu链接题意不再赘述。优先枚举的应该是\(VIP\)用户,枚举范围应该是\([0,n-l]\)之后总客户数为\(s=n-i\)再考虑枚举\(100\)的总人数为\(x\)则要求\(s-2x\in[l,r]\)这部分方案数应该为从\((0,0)\)到达\((s-x,x)\)且不越过\(y=x\)的方案数。利用折线法求出方案数为\(C(s,x)......
  • Educational Codeforces Round 38 C- F
    EducationalCodeforcesRound38C-Fhttps://codeforces.com/contest/938今天写出了三题ovoC.ConstructingTests多画几个图就能发现,对于\(n\timesn\)的正方形来说,要使得\(m\timesm\)的子正方形至少有一个\(0\),则最少的\(0\)个数为\(\lfloor\frac{n}{m}\rfloo......