CodeForces 337D——Book of Evil(数据结构)
来源:互联网 发布:如何投资理财 知乎 编辑:程序博客网 时间:2024/05/16 16:56
题意:就是一棵树上,有一些点被来自东方的神秘力量影响的,力量影响范围是d,为可能的力量源有几个。
思路:相当于是找到距离这m的点的距离都不小于d的点的个数。
先从任意一个点一次dfs,找到m个点中距离最远的点,标记为max1,在以max1开始,dfs一遍,从数组d1记录各个点的距离,找到距离最远的点max2,再从max2开始跑一遍dfs,用d2记录距离。遍历所有点,到max1和max2的距离都小于d的点就成立。
#include<cstdio>#include<cstring>#include <string>#include <iostream>#include <algorithm>#include <vector>#include <map>#include <set>using namespace std;#define MAXN 200010#define INF 1000000000int d1[MAXN],d2[MAXN];int h[MAXN];int head[MAXN];int p[MAXN];set <int> s;vector <int> ans;struct edge{int v;int next;};edge G[MAXN*2];int num=0;int vis[MAXN];void add(int u,int v){G[num].v=v;G[num].next=head[u];head[u]=num++;};void dfs(int u,int d[]){ vis[u]=true; for(int k=head[u];k!=-1;k=G[k].next){ int v=G[k].v; if(!vis[v]){ d[v]=d[u]+1; dfs(v,d); } }}int n,m,d;int main(){ scanf("%d%d%d",&n,&m,&d); for(int i=0;i<m;i++){ scanf("%d",p+i); s.insert(p[i]); } for(int i=1;i<=n;i++){ if(s.count(i)==0) ans.push_back(i); } memset(head,-1,sizeof(head)); memset(vis,0,sizeof(vis)); for(int i=0;i<n-1;i++){ int a,b; scanf("%d%d",&a,&b); add(a,b); add(b,a); } h[1]=0; dfs(1,h); int max1=0; for(int i=0;i<m;i++){ if(h[p[i]]>h[p[max1]]) max1=i; } memset(vis,0,sizeof(vis)); d1[p[max1]]=0; dfs(p[max1],d1); int max2=0; for(int i=0;i<m;i++){ if(d1[p[i]]>d1[p[max2]]) max2=i; } memset(vis,0,sizeof(vis)); d2[p[max2]]=0; dfs(p[max2],d2); int cnt=0; for(int i=1;i<=n;i++){ if(d1[i]<=d&&d2[i]<=d) cnt++; } printf("%d\n",cnt); return 0;}
0 0
- CodeForces 337D——Book of Evil(数据结构)
- codeforces 337D Book of Evil
- Codeforces 337D Book of Evil (树的直径)
- CodeForces 337D Book of Evil(双向dfs)
- codeforces 337D D. Book of Evil(树形dp)
- codeforces 337D D. Book of Evil (树形 dp)
- 337D Book of Evil
- 【树形DP】 codeforces 337D Book of Evil
- Codeforces 337D Book of Evil 【树,dfs】
- Codeforces-337D Book of Evil【树形dp】
- CodeForces Round #196 D Book of Evil
- CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
- CF-337D Book of Evil
- cordeforces 337D Book of Evil
- codeforces 337E Book of Evil (dfs)
- Codeforces Round #196 (Div. 2) / 337D Book of Evil (树的直径变形——树的最长标记弦)
- Codeforces 337D Book of Evil 树状DP 或 BFS找子树直径端点
- Codeforces 337 D Book of Evil(树形dp,两遍dfs)
- HDOJ 1084 What Is Your Grade?
- Eclipse使用技巧记录
- 微信公众平台开发(八) 自定义菜单功能开发
- 关于TabHost的详细解析
- 微信公众平台开发(九) 数据库操作
- CodeForces 337D——Book of Evil(数据结构)
- PHP解决mui前端框架中的ajax请求跨域问题
- 畅通工程 hd 1233
- APPRTC本地服务器常见问题汇总
- 微信公众平台开发(十) 消息回复总结
- 【JAVA语言程序设计基础篇】--图形用户界面基础--一些总结
- HDOJ 1234 开门人和关门人
- 微信公众平台开发(十一) 功能整合
- Unity03之Input及飞机案例