首页 > 其他分享 >CF1593E-Gardener-and-Tree-题解

CF1593E-Gardener-and-Tree-题解

时间:2023-12-20 09:14:43浏览次数:35  
标签:cnt int 题解 Tree CF1593E ans sizeof include

title: CF1593E Gardener and Tree 题解
date: 2022-05-27 21:30:48
categories: 
 - 题解

原题面

题意:

给出一个 \(n\) 个点的树,删除 \(k\) 次叶子节点,求剩下的节点数。

思路:

设 \(cnt_i\) 为 \(k\) 最小为多少时点 \(i\) 会被删除。

当 \(i\) 将要被删除时,它一定是现在的叶子,联想到拓扑排序的特点,直接跑一遍拓扑排序即可。

初始时所有叶子的 \(cnt\) 都为 \(1\),跑完拓扑排序后遍历一遍 \(cnt\) 数组统计 \(cnt_i > k\) 的数量,时间复杂度 \(O(n)\)。

code:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=4e5+10;
int t,n,k,cnt[N],d[N],ans;
bool f[N];
vector<int> g[N];
queue<int> q;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&k);
		ans=0;
		memset(f,0,sizeof(f));
		memset(d,0,sizeof(d));
		memset(cnt,0,sizeof(cnt));
		for(int i=1;i<=n;i++)g[i].clear();
		for(int i=1,x,y;i<n;i++)
		{
			scanf("%d%d",&x,&y);
			g[x].push_back(y);
			g[y].push_back(x);
			d[x]++,d[y]++;
		}
		if(k==0)
		{
			printf("%d\n",n);
			continue;
		}
		for(int i=1;i<=n;i++)if(d[i]==1)q.push(i),f[i]=cnt[i]=1;
		while(!q.empty())
		{
			int t=q.front(); 
			q.pop();
			for(int i=0;i<g[t].size();i++)
			{
				int v=g[t][i];
				if(f[v])continue;
				d[v]--;
				if(d[v]==1)
				{
					f[v]=1;
					cnt[v]=cnt[t]+1;
					q.push(v);
				}
			}
		}
		for(int i=1;i<=n;i++)if(cnt[i]>k)ans++;
		printf("%d\n",ans);
	}
}

标签:cnt,int,题解,Tree,CF1593E,ans,sizeof,include
From: https://www.cnblogs.com/jr-inf/p/17915355.html

相关文章

  • CF1866B Battling with Numbers 题解
    前置知识:如果\(p=x^a,q=x^b\),那么\(\gcd(p,q)=x^{\min(a,b)},\operatorname{lcm}(p,q)=x^{\max(a,b)}\)。对于每个\(x\ina_i\),令\(x\)在\(Y\)中的指数为\(d_i\)(实际上不一定),计算贡献时,考虑将\(b_i\)与\(d_i\)分别放入\(p\)和\(q\)中:如果\(b_i<d_i\),贡献为......
  • CF1814B Long Legs 题解
    建议降黄令\(m\)最后的值为\(a\),那么此时最佳答案为\(a-1+\left\lceil\frac{x}{a}\right\rceil+\left\lceil\frac{y}{a}\right\rceil\),每次加尽量大的\(m\)一定最优。当\(x,y\)增大时,答案显然不降,考虑找到\(a\)的上界。用\(O(n)\)的暴力跑极限数据,发现答......
  • CF468C Hack it! 题解
    题意:给出一个数\(a\),构造一组\(l,r\)使得\(\sum_{i=l}^rf(i)\equiv0\pmoda\)。其中\(a\leq10^{18}\),\(l,r\leq10^{200}\)。分析:以下用\((l,r)\)表示构造出来的一对\(l,r\),\(f(l,r)=\sum_{i=l}^rf(i)\)。考虑从某个值一步一步移动到模\(a\)余\(0\)的情况。......
  • AT_abc325_e [ABC325E] Our clients, please wait a moment 题解
    原题传送门最短路板题。乘坐的过程一定是先车再火车(如果有),假设换车地点为\(x\),那么最小代价为坐车从\(1\)到\(x\)与坐火车从\(x\)到\(n\)的最小代价之和,分开跑最短路即可,时间复杂度\(O(n^2\logn+n)\)。code:#include<iostream>#include<cstdio>#include<cstring>......
  • AT_abc323_f [ABC323F] Push and Carry 题解
    不难发现答案的下界为\(|x_b-x_c|+|y_b-y_c|\),这是每步都推箱子的情况。但很多时候并不能直接开始推箱子,所以人要先移动到箱子的后面(相对于目的地),再把箱子往目的地推。比如这种情况(B为箱子,C为目的地):B.......C推完箱子的一边后,还要走到另一边:↓B..................
  • USACO2023 Cu,Ag,Au 题解
    晚上没事干,于是写了。Cu:1h25minAg:2h40minAu:2h15min做最久的竟然是AgT1。CuT1诈骗题,做了50min。考虑如果越过了\(a_i\)往后走,那么\(a_i\)的高度至少翻了一倍。直接模拟即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;const......
  • vscode中Todo Tree插件的使用
    vscode中TodoTree插件的使用配置JSON将下方的JSON代码放入用户配置中复制JSON配置后,点击这里,然后粘贴。"todo-tree.tree.showScanModeButton":false,"todo-tree.filtering.excludeGlobs":["**/node_modules","*.xml","*.XML"],"todo......
  • CF1913 E Matrix Problem 题解
    LinkCF1913EMatrixProblemQuestion给定一个\(n\timesm\)的01矩阵,你可以把矩阵中的任意一个元素01翻转需要最后的矩阵满足,每行\(1\)的个数有\(A[i]\)个,每列\(1\)的个数有\(B[i]\)个Solution这貌似是一道非常经典的费用流题目我们建立\(n\)个行节点,\(m......
  • 2023强网杯ez_fmt题解及进阶格式化之劫持子函数
    格式化任意内存读写相信已经是老生常谈了,但是随着题目难度加大,格式化题目给我们的难题逐渐变成了覆写什么,改写什么。这题对我是一道很好的例题,其中对栈及函数调用的理解堪称刷新我的认知。exp先放着,想自己调试理解的可以看看。frompwnimport*context(terminal=['tmux','......
  • CSP2023-12树上搜索题解
    刚考完csp,这道题是大模拟题,题意不难理解。以下是题目链接:http://118.190.20.162/view.page?gpid=T178当时考场上这道题调了好久没调出来,忽略了很多细节。在这里分享一下满分题解及思路,帮大家避避坑。#include<iostream>#include<stdio.h>#include<queue>#include<cstring>#inc......