首页 > 其他分享 >ABC 368D Minimum Steiner Tree

ABC 368D Minimum Steiner Tree

时间:2024-08-24 23:15:03浏览次数:6  
标签:begin ABC int dfs 子树 Steiner Minimum maxn 节点

题意
给你一颗由N个点组成的树,指定K个节点,求包含这K个节点的最小子树的大小

思路
考虑正难则反,我们从开始的树当中剪掉那些没有任何指定点的子树,剩下来的子树就是最小的、能包含所有指定节点的子树。关于剪去这个操作,就是dfs一旦遇到以当前节点为根的子树没有任何指定点时,就停止dfs,并把该子树的大小贡献到much里。最后用n减去much,就是答案(注意选根的时候要注意,用指定的某个点作为根来进行dfs,否则这个方法会被菊花图给hack掉)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
int a[maxn],sz[maxn],much;
vector<int>ds[maxn];

void dfs1(int u,int fa)
{
	sz[u]=1;
	for(int i=0;i<ds[u].size();i++)
	{
		int v=ds[u][i];
		if(v==fa) continue;
		dfs1(v,u);
		sz[u]+=sz[v];
		a[u]+=a[v];
	}
}

void dfs2(int u,int fa)
{
	if(!a[u])
	{
		much+=sz[u];
		return ;
	}
	for(int i=0;i<ds[u].size();i++)
	{
		int v=ds[u][i];
		if(v==fa) continue;
		dfs2(v,u);
	}
}


signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n-1;i++)
	{
		int u,v;
		cin>>u>>v;
		ds[u].push_back(v);
		ds[v].push_back(u);
	}
	int begin;
	for(int i=1;i<=k;i++) 
	{
		int x;
		cin>>x;
		begin=x;
		a[x]=1;
	}
	dfs1(begin,0);
	dfs2(begin,0);
	cout<<n-much<<endl;
	
	
	return 0;
}

标签:begin,ABC,int,dfs,子树,Steiner,Minimum,maxn,节点
From: https://www.cnblogs.com/lulu7/p/18378465

相关文章

  • 别样的ABC大战
    前言:BYDABC大战。此事发生于2024年3月,为保护隐私(有的人应该能看出来哈哈),人物名字均使用字母代替。故事虽根据真实事件改编,但较为夸张。一天,W老师给我发来微信。她说:“你敢不敢和其他人举行ABC大战?”我豪爽的答应了:“我当然敢!”周六下午在花园路XX号举行,谁不来谁就不是OIer。我......
  • ABC 368DF
    摆烂场,唉唉D做这题的时候总想着避免所需点形成一棵子树的情况,感觉处理不出来就去摆烂了。。。忘了自己在下面已经处理过了,根节点一定是所需点之一,在这个前提下只需要回溯的时候判断当前点的子树中有没有所需点,有的话就要加入所求树。F蛮简单的F,赛后看了看,大概10分钟切掉......
  • abc367
    A.模拟#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+7;intmain(){inta,b,c;cin>>a>>b>>c;if(b<c){if(a>c||a<b)cout<<"Yes"<<endl;......
  • .NET 8 + Vue 3 极简 RABC 权限管理系统
    合集-.NET开源项目(9) 1..NET8通用权限框架前后端分离,开箱即用08-022.推荐一款界面优雅、功能强大的.NET+Vue权限管理系统08-053..NET开源权限认证项目MiniAuth上线08-064..NET与LayUI实现高效敏捷开发框架08-085..NET8+Blazor多租户、模块化、DDD框架、......
  • Codeforces Round 967 (Div. 2) ABCD
    来源:CodeforcesRound967(Div.2)做题时间:2024_08_21A.MakeAllEqual使所有元素相等的最小操作次数,就是保留最大的数字所以操作次数就是总数减去数量最多得数B.GeneratePermutation题意构造一个序列\(p\),内部元素是\([1,2,\cdots,n]\)打乱使长度为\(n\)的初始......
  • .NET 8 + Vue 3 极简 RABC 权限管理系统
    前言在日常工作中,几乎每家公司都需要一个后台管理系统来处理各种任务。为了帮助大家快速搭建这样一个系统,给大家介绍一个基于最新技术.NET8和前端框架Vue3实现的极简RABC(基于角色的访问控制)权限管理系统。该系统后端采用经过精心精简的ABP框架,前端则使用了vue-pure-adm......
  • LeetCode 2952. Minimum Number of Coins to be Added
    原题链接在这里:https://leetcode.com/problems/minimum-number-of-coins-to-be-added/description/题目:Youaregivena 0-indexed integerarray coins,representingthevaluesofthecoinsavailable,andaninteger target.Aninteger x is obtainable ifthere......
  • ABC298Ex(2)
    多次询问\(L,R\),求\(\sum\limits_{i}\min(d(i,L),d(i,R))\)。不失一般性的令\(dep_L\gedep_R\)。考虑\(i\)到\(L/R\)的路径是怎样的。一定是\(i\)到\(L\rightarrow\)上的某一点\(x\)再到\(L/R\)。如果按照每个点到达\(L/R\)对其进行染色,则每种颜色都只有一......
  • ABC298Ex
    水紫。多次询问\(L,R\),求出\(\sum\limits_{i=1}^n\min(d(i,L),d(i,R))\)。不失一般性的令\(del_L\ledel_R\)。分几部分考虑。\(L\)或\(R\)的子树中。预处理\(f_i\)代表\(i\)的子树中的点到\(i\)的距离和,\(s_i\)代表\(i\)的子树大小。转移方程:\(f_i=\su......
  • 题解:AT_abc352_e [ABC352E] Clique Connect
    [题目通道]([ABC352E]CliqueConnect-洛谷)鄙人今日写人生第一篇题解希望管理大大通过首先,我们先看题:它说一共有n个点,m回操作。。。每次操作都有一个Ki和CiKi代表有Ki个点,Ci代表每条边所赋的边权一看就知道这是个最小生成树的板子我使用了著名的kruskal话......