[vijos1476]旅游规划(csapc)(树形dp)
来源:互联网 发布:景观设计大数据 编辑:程序博客网 时间:2024/05/20 16:33
题目:
我是超链接
题意:
给一棵边带权的树,求哪些点在至少一条直径上n<=200000
题解:
这里用dp比较方便,f[i]最长g[i]次长
这次从上到下,先算父亲再算孩子,h[i]表示i向除子树外最远距离
代码:
#include <cstdio> #include <iostream> #define N 200005 using namespace std; int tot,nxt[N*2],point[N],v[N*2],ans[N],f[N],g[N],n,i,maxx,anss,h[N]; void addline(int x,int y) { ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x;} void treedp(int x,int fa) { for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) { treedp(v[i],x); if (f[v[i]]+1>f[x]) { g[x]=f[x]; f[x]=f[v[i]]+1; } else g[x]=max(g[x],f[v[i]]+1); } maxx=max(maxx,f[x]+g[x]); } void dfs(int x,int fa){ int cnt=0; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) if (f[x]==f[v[i]]+1) cnt++; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) { if (f[x]!=f[v[i]]+1 || (f[x]==f[v[i]]+1 && cnt>1)) h[v[i]]=max(h[x],f[x])+1; else h[v[i]]=max(h[x],g[x])+1; dfs(v[i],x); }}int main() { scanf("%d",&n); for (i=1;i<n;i++) { int a,b; scanf("%d%d",&a,&b);a++;b++; addline(a,b); } treedp(1,0); dfs(1,0); for (i=1;i<=n;i++) if (f[i]+max(g[i],h[i])==maxx) ans[++anss]=i; for (i=1;i<=anss;i++) printf("%d\n",ans[i]-1);}
阅读全文
0 0
- [vijos1476]旅游规划(csapc)(树形dp)
- vijos1476 旅游规划-动态规划
- VIJOS P1476 旅游规划(csapc)
- 旅游计划(树形dp)
- [BZOJ2657][Zjoi2012]旅游(journey)(dfs||树形dp)
- 树形动态规划(树状DP)小结
- 树形动态规划(树状DP)小结
- BZOJ 2657 ZJOI2012 旅游(journey) 树形DP
- hdu_1054_树形dp动态规划
- 动态规划-树形dp总结
- 动态规划_树形DP
- 旅游规划(25 分)
- POJ 1947 Rebuilding Roads(动态规划-树形DP)
- 动态规划(树形DP)之Anniversary party
- 旅游规划
- 旅游规划
- 旅游规划
- 树形动态规划(树形DP)入门问题—初探 & 训练
- maven详解-(7)继承
- [贪心 + DP] Codeforces #571B. Minimization
- Java对Redis的操作
- [LR]Controller配置
- 技术学到多厉害,才能顺利进入BAT?
- [vijos1476]旅游规划(csapc)(树形dp)
- node初探(1)--创建聊天服务器
- Elasticsearch 数据操作
- centos 7.0系统 当没有匹配到要重命名的文件时候,rename报错解决办法
- angular的实现商品信息的增 删 查
- Linux top命令的用法详细详解
- 使用librtmp进行H264与AAC直播
- onclick事件 加完参数不起作用
- 好文章,需收藏