【*1900 图论】CF1328 E

Problem - E - Codeforces

题意:

思路:

注意到题目的性质:满足条件的路径个数是极少的,因为每个点离路径的距离**<=1**

先考虑一条链,那么直接就选最深那个点作为端点即可

为什么,因为我们需要遍历所有点的父亲

推广到树,也是要遍历所有点的父亲

Code:

cpp 复制代码
#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=2e5+10;
const int mod=1e9+7;

vector<int> G[mxn];

int N,M,K,u,v,x;
int idx=0;
int dep[mxn],In[mxn],sz[mxn],F[mxn];

void dfs(int u,int fa){
	sz[u]=1;
	F[u]=fa;
	dep[u]=dep[fa]+1;
	In[u]=++idx;
	for(auto v:G[u]){
		if(v==fa) continue;
		dfs(v,u);
		sz[u]+=sz[v];
	}
}
bool cmp(int x,int y){
	return dep[x]<dep[y];
}
bool check(int u,int v){
	return In[v]>=In[u]&&In[v]<=In[u]+sz[u]-1;
}
void init(){
	for(int i=0;i<=N;i++){
		dep[i]=In[i]=sz[i]=F[i]=0;
		G[i].clear();
	}
}
void solve(){
	cin>>N>>M;
	init();
	for(int i=1;i<=N-1;i++){
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	dfs(1,0);
	F[1]=1;
	while(M--){
		cin>>K;
		vector<int> V;
		for(int i=1;i<=K;i++){
			cin>>x;
			V.push_back(F[x]);
		}
		//for(int i=0;i<V.size();i++) cout<<V[i]<<" \n"[i==V.size()-1];
		sort(V.begin(),V.end(),cmp);
		int ok=1;
		for(int i=1;i<V.size();i++){
			if(!check(V[i-1],V[i])){
				ok=0;
				break;
			} 
		}
		if(ok) cout<<"YES"<<'\n';
		else cout<<"NO"<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}
相关推荐
燃于AC之乐4 小时前
《算法实战笔记》第10期:六大算法实战——枚举、贪心、并查集、Kruskal、双指针、区间DP
算法·贪心算法·图论·双指针·区间dp·二进制枚举
北温凉5 小时前
EEG 有效连接分析(基于 MVGC 与图论)
图论·eeg·mvgc·脑功能连接
仰泳的熊猫5 小时前
题目1432:蓝桥杯2013年第四届真题-剪格子
数据结构·c++·算法·蓝桥杯·深度优先·图论
一条大祥脚1 天前
ABC357 基环树dp|懒标记线段树
数据结构·算法·图论
大闲在人1 天前
Mermaid vs Graphviz, 现代文档的“瑞士军刀”与 图论可视化的“学术基石”
图论
scx201310042 天前
20260129LCA总结
算法·深度优先·图论
Snow_day.2 天前
有关线段树应用(1)
数据结构·算法·贪心算法·动态规划·图论
Mr_Xuhhh3 天前
图的相关知识点总结
图论
充值修改昵称3 天前
数据结构基础:图论基础全面解析
数据结构·python·图论
檐下翻书1733 天前
招聘SOP流程图-泳道图模板详细教程
论文阅读·毕业设计·流程图·图论·论文笔记·毕设