首页 > 其他分享 >洛谷 P4186

洛谷 P4186

时间:2022-10-04 18:22:29浏览次数:57  
标签:cnt 子树 洛谷 int mn dep 节点 P4186

首先对于一棵子树,肯定是放在这棵子树中深度最小的叶节点。
那如何分析子树中深度最小的叶节点深度够不够小呢?
我们看到,我们关注叶节点深度是为了看它能不能在 Bessie 从根节点到达该子树的根之前(或同时)到达子树的根。
也就是说,最浅叶节点 到 子树根 的距离应该小于等于 树根 到 子树根 的距离。只要满足了这一点,该子树就可以只放一个农民。否则我们就要继续递归去考虑这个子树的各个子树。
DFS 求出每个节点的深度以及以它为根的子树的最浅叶节点的深度。

Code:

#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, k, ans;
int head[N], ver[N*2], nxt[N*2], cnt;
int dep[N], mn[N];

void add(int u, int v) {
	ver[++cnt] = v, nxt[cnt] = head[u], head[u] = cnt;
}

void dfs(int u, int fa) {
	int t = dep[u];
	for (int i = head[u]; i; i = nxt[i]) {
		int v = ver[i];
		if (v == fa) continue;
		dep[v] = dep[u] + 1, dfs(v, u);
		if (t == dep[u]) t = mn[v];
		else t = min(t, mn[v]); 
	}
	mn[u] = t;
}

void dfs1(int u, int fa) {
	if (mn[u] <= dep[u] * 2) return ++ans, void();
	for (int i = head[u]; i; i = nxt[i]) {
		int v = ver[i];
		if (v == fa) continue;
		dfs1(v, u); 
	}
}

int main() {
	scanf("%d%d", &n, &k);
	for (int i = 1, u, v; i < n; ++i) scanf("%d%d", &u, &v), add(u, v), add(v, u);
	dfs(k, 0), dfs1(k, 0);
	printf("%d", ans);
	return 0;
}

标签:cnt,子树,洛谷,int,mn,dep,节点,P4186
From: https://www.cnblogs.com/Kobe303/p/16754179.html

相关文章

  • 洛谷 CF550C Divisibility by Eight(DP/数论)
    遇事不决,小学数学。https://www.luogu.com.cn/problem/CF550C题目大意:给你一个位数不超过100的非负整数N(不含前导0)。你的任务是判断这个数字能否通过去掉其中......
  • 【树上背包】洛谷 P4516 [JSOI2018] 潜入行动
    P4516[JSOI2018]潜入行动省选/NOI-、树上背包计数题意略设状态为\(dp[u][j][0/1][0/1]\),u点子树放了j个装置,u点有没有放装置,u点有没有被监听的方案数。对......
  • 洛谷 P8557 炼金术 题解
    题目大意给定\(n\)种金属,放进\(k\)个熔炉,要求最终每种金属都要能从熔炉里拿出来,求熔炉炼金的方案数对\(998244353\)取模。分析从金属角度考虑。不难发现对于每......
  • 洛谷 P3388 【模板】割点(割顶)
    题目链接:https://www.luogu.com.cn/problem/P3388 【模板】割点(割顶)题目背景割点题目描述给出一个$n$个点,$m$条边的无向图,求图的割点。输入格式第一行输入两个......
  • 洛谷 P4840 解题报告
    洛谷P4840解题报告STEP1.题目大意求字符串\(S\)的所有循环同构中本质不同的回文子串数量的最大值。数据范围$|S|\leq1.5e6$STEP2.思路分析看到回......
  • 洛谷P3375 kmp字符串匹配
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inti,j,k,la,lb,kmp[1000005];chara[1000005],b[1000005];signedmain(){  scanf("%s%s",......
  • 洛谷 P1506 拯救oibh总部(DFS / 染色法)
    https://www.luogu.com.cn/problem/P1506题目描述给定n*m的图形,由*和0组成。让我们求出被*四面包围了的0的数量。输入#1450000000*000*0*000*00输出......
  • 洛谷 P2709 小B的询问 题解
    莫队板子。//P2709小B的询问#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=50005;structQuery{ intl,r,id;}q[MAXN];in......
  • 洛谷 P2419 [USACO08JAN]Cow Contest S(最短路:floyed)
    https://www.luogu.com.cn/problem/P2419题目大意:给定n头奶牛(1<=N<=100),按1..N依次编号。m轮:两两之间进行对决,赢了的排在左边,输了的排在右边。我们想知道奶牛们编......
  • 洛谷P8551 Bassline 题解
    P8551Bassline题解分析这道题做月赛的时候想了好久,最后发现其实很简单。我们用样例数据来分析:如图所示,我们将每个区间抽象化为一个一个的长条。题目给我们的两个要......