Codeforce 337D(树的直径变形)
来源:互联网 发布:淘宝订单业务流程 编辑:程序博客网 时间:2024/06/06 00:39
链接:点击打开链接
题意:在一个n个点的树中,给出m个点,问这颗树中距离这m个点的距离小于等于d的点的个数
代码:
#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;struct node{ int to,cost; node(int x,int y){ to=x,cost=y; }};vector<node> G[100005];int n,dp[100005],vis[100005],dis[100005][5],sign[100005];void dfs1(int s){ int i,tmp; sign[s]=1; for(i=0;i<G[s].size();i++){ tmp=G[s][i].to; if(!sign[tmp]){ dfs1(tmp); if(dis[tmp][0]+G[s][i].cost>dis[s][0]){ dis[s][0]=dis[tmp][0]+G[s][i].cost; vis[s]=tmp; } } } for(i=0;i<G[s].size();i++){ tmp=G[s][i].to; if(tmp!=vis[s]) dis[s][1]=max(dis[s][1],dis[tmp][0]+G[s][i].cost); }}void dfs2(int s){ int i,tmp; sign[s]=1; for(i=0;i<G[s].size();i++){ tmp=G[s][i].to; if(!sign[tmp]){ if(tmp==vis[s]) dp[tmp]=max(dp[s],dis[s][1])+G[s][i].cost; else dp[tmp]=max(dp[s],dis[s][0])+G[s][i].cost; dfs2(tmp); } }}int main(){ //就是树的直径变形,有原来向上和向下 int i,j,x,y,m,d,ans,num; //的最长长度变为求这个点到给定的m个点中 while(scanf("%d%d%d",&n,&m,&d)!=EOF){ //的最长向上和向下的距离 memset(vis,0,sizeof(vis)); memset(sign,0,sizeof(sign)); //可以先看树的直径 for(i=1;i<=n;i++){ //http://blog.csdn.net/stay_accept/article/details/50813783 G[i].clear(); dp[i]=dis[i][0]=dis[i][1]=-INF; } for(i=1;i<=m;i++){ scanf("%d",&num); dp[num]=dis[num][0]=dis[num][1]=0; } for(i=2;i<=n;i++){ scanf("%d%d",&x,&y); G[x].push_back(node(y,1)); G[y].push_back(node(x,1)); } dfs1(1); memset(sign,0,sizeof(sign)); dfs2(1); ans=0; for(i=1;i<=n;i++) if(dis[i][0]<=d&&dp[i]<=d) ans++; printf("%d\n",ans); } return 0;}
0 0
- Codeforce 337D(树的直径变形)
- codeforce 120F 【树的直径】
- POJ-----1383树的直径变形
- Codeforces Round #196 (Div. 2) / 337D Book of Evil (树的直径变形——树的最长标记弦)
- Codeforces 337D Book of Evil (树的直径)
- codeforces 14D 树的直径
- Codeforces Round #328 (Div. 2) D. Super M (树的直径,虚树的直径)
- Codeforces 14D Two Paths 树的直径
- Codeforces--14D--Two Paths(树的直径)
- Codeforces 14D Two Paths 【树的直径】
- 【CodeForces】14D - Two Paths(树的直径)
- [树的直径] Codeforces 804D Round #411 (Div. 1) D. Expected diameter of a tree
- bzoj3124 [Sdoi2013]直径 树的直径
- Codeforce 337D 容斥+树形dp
- 【树的直径】
- 树的直径
- 求树的直径
- 树的最长直径
- Android获取外网ip
- 获取当前正在运行的虚拟机(Vmware Workstation),并对虚拟机进行控制(.Net)
- 图文混排
- itemfragment
- Java泛型通配符extends与super
- Codeforce 337D(树的直径变形)
- 将多个文件进行压缩处理,然后传输到服务器
- Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()
- 搭建Solr6.0.1+tomcat8服务器
- 客户端加密
- CoreText 设置文字属性和插入图片
- mysql mybatis 批量update
- NoSQL之Redis---持久化(persistence)示例
- Javascript DOM Event对象方法详解