首页 > 其他分享 >CF1187E 题解

CF1187E 题解

时间:2024-10-20 15:02:55浏览次数:1  
标签:int 题解 fa dfs1 CF1187E Maxn 黑点 Size

Title translation

给定一棵 \(n\) 个点的树,初始全是白点

要做 \(n\) 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值。第一次操作可以任意选点,求可获得的最大权值

Solution

如何让这道题秒降绿题呢?

先简化一下题意:

给定一个 \(n\) 个点的树,请求出一个结点,使得以这个结点为根时,所有结点的深度之和最大,求这个深度

这不和P3478一样吗!

为何是这样?

我们换个方向思考:

因为每一次是把一个与一个黑点相隔一条边的白点染成黑点,考虑一个节点 \(v\),当这棵树的根节点是 \(v\)、\(v\) 的父亲、\(v\) 的父亲的父亲……的时候,\(v\) 都会给它们所在的联通块大小贡献 \(1\)。那它最多贡献多少个 \(1\) 呢?其实就是它自己的深度

那题目就简化成了刚刚的那样……

Code

	#include <bits/stdc++.h>
	#define int long long
	using namespace std;
	const int Maxn=1e6+5;
	int n;vector<int>e[Maxn];
	int Size[Maxn],Dep[Maxn];
	int f[Maxn];
	void dfs1(int u,int fa){
		Size[u]=1;Dep[u]=Dep[fa]+1;
		for(auto v:e[u]){
			if(v==fa)continue;
			dfs1(v,u);
			Size[u]+=Size[v];
		}
	}
	void dfs2(int u,int fa){
		for(auto v:e[u]){
			if(v==fa)continue;
			f[v]=f[u]+n-2*Size[v];
			dfs2(v,u);
		}
	}
	signed main(){
		ios::sync_with_stdio(0);
		cin.tie(0); cout.tie(0);
		cin>>n;
		for(int i=1;i<=n-1;i++){
			int u,v;cin>>u>>v;
			e[u].push_back(v);
			e[v].push_back(u);
		}
		dfs1(1,0);
		for(int i=1;i<=n;i++)f[1]+=Dep[i];
		dfs2(1,0);int maxn=INT_MIN,id;
		for(int i=1;i<=n;i++)
			if(f[i]>maxn)maxn=f[i],id=i;
		cout<<maxn;
		return 0;
	}

标签:int,题解,fa,dfs1,CF1187E,Maxn,黑点,Size
From: https://www.cnblogs.com/NightFire666-blog/p/18487301

相关文章

  • 题解:AT_abc376_c [ABC376C] Prepare Another Box
    这道题要求把\(a\)数组和\(b\)数组一一匹配,且要求无法匹配的数量最多为一,并且这个无法匹配的元素最小。可以注意到我们把两个数组排序以后一一对应以后如果出现一个无法匹配的元素,那么这一定就是答案。但是如果我们从小到大枚举,会发现最后剩下的元素不一定最小,所以我们选择......
  • 【题解】「COCI 2018」Teoretičar
    LinkofThisProblem根据Vizing定理,最小的答案就是二分图的最大度数。同时可以在\(O(nm)\)的时间复杂度内构造出一组解。显然对于这道题我们需要更高效的做法。注意到\(2\)的整数次幂,考虑分治。既然答案跟最大度数有关,如果我们每次能把边集分为两个集合,认为她们的颜色......
  • ICPC 2021–2022,NERC – 北欧欧亚总决赛题解翻译
    原文链接ICPC2021–2022,NERC–北欧欧亚总决赛题解翻译圣彼得堡,阿拉木图,巴尔瑙尔,明斯克,埃里温,2022年4月13日问题A.可接受的地图(AdmissibleMap)问题作者和开发者:IlyaZban我们称形如“RLRL...RL”的任何字符串为平凡字符串。引理任何非平凡字符串最多只能有一个构成......
  • [ABC376E] Max × Sum 题解
    [ABC376E]Max×Sum题解原题链接洛谷链接一道简单的推性质题,首先明确一个性质,子集是非连续的,所以在计算时并不用连续区间求。拿过题来,首先想的是枚举\(B\)的最小子集,但其复杂度为\(O(C_N^K)\)复杂度过高,不足以通过本题。于是转变思路,枚举\(A\)之中的最大值。若\(a_i......
  • 整数去重-题解
    整数去重-题解题目描述给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。输入格式输入包含两行:第一行包含一个正整数n(1<=n<=20000),表示第二行序列中数字的个数;第二行包含n个整数,整数......
  • P4050 麻将 题解
    不愧是ZJOI。题意:有\(n\)种麻将牌,每种四张。定义"胡牌"为小鸡胡或普通七小对。给定初始\(13\)张牌,将剩下\(4n-13\)张牌随机排列,问期望摸多少张牌能胡(假设采用最优决策)。\(n\le100\)。先考虑怎么判定是否胡牌。\(cnt[i]\)表示前\(i\)种牌能凑出多少个对子,\(f[i][j]......
  • P10532 [XJTUPC2024] 筛法 题解
    ~~打表可知答案为$n^2$~~一种几何证明,方法来自于讲评。考虑把$n^2$个整点放到坐标系中,满足$(x,y)(x\len,y\len)$。现在从原点向每个满足$(x,y)(x\perpy)$的点引出一条射线,显然每个点都会唯一的被一条射线覆盖到,因为$(\dfrac{x}{\gcd(x,y)},\dfrac{y}{\g......
  • P3571 [POI2014] SUP-Supercomputer 题解
    P3571「POI2014」SUP-Supercomputer题解一道“较”水的黑题(可一开始苦思冥想还是不会)。本蒟蒻的第一篇黑题题解,求赞。题意简化给定一棵$n$个节点、根节点为$1$的有根树。$q$次询问中每次给定一个$k$,输出需要最少用几次操作次数删除完整棵树。每次操作可以选择删......
  • P6533 [COCI2015-2016#1] RELATIVNOST 题解
    考虑当$q=0$时怎么做。注意到性质$c\le20$,因此不妨正难则反,将**至少有$c$个人购买彩色画**的方案数转化为总方案数减去**不足$c$人购买彩色画的方案数**。这个是一个类似凑数的dp,不妨考虑背包。我们有$f_{i,j}$表示前$i$人中**恰好**$j$人购买彩色画的方......
  • [CF1616H] - Keep XOR Low 的题解
    一道比较神奇的题目,状态显得比较扯淡,但是就是能过!先建立出trie树,设\(dp_u\)表示以\(u\)为根的子树内的答案。但我们发现,若\(x\)的当前位为\(1\),那么问题就没法根据他的左右子树求解了,怎么办呢。考虑一个很扯淡的状态,设\(dp_{u,v}\)表示考虑了\(u,v\)为根的子树,他......