HDU4514 湫湫系列故事——设计风景线 ——树的直径/树形dp+判环
中文题面,给出一个图,问能不能成环,如果可以就输出YES。否则输出该树的直径。
这里的判环我们用路径压缩的并查集就能很快的判断出来,可以在输入的同时进行判断。这题重点就是求树的直径。
树直径的性质可以参考https://blog.csdn.net/pi9nc/article/details/12394117 实现在代码求法上的就是:
假设 s-t这条路径为树的直径,或者称为树上的最长路
从任意一点u出发搜到的最远的点一定是s、t中的一点,然后在从这个最远点开始搜,就可以搜到另一个最长路的端点,即用两遍广搜就可以找出树的最长路
搜的时候要注意 ,什么时候该清空什么数组 在代码中有一定的解释
#include<iostream>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
#define p pair<int,int>
vector<p> a[];
bool pd[],pdd[]; //pd数组判断该点有没有遍历到 pdd数组是保证每一个点都要被遍历过
int dp[]; //dp值为以改点为起点最长路径,在第一次找端点遍历后要清零
int ans,mark,anss;//annss为最终答案,mark用来标记第一次bfs找到的树的直径的端点
int bfs(int u)
{
ans=;
memset(pd,false,sizeof(pd));
memset(dp,false,sizeof(dp));
pd[u]=pdd[u]=;
queue<int> q;
q.push(u);
while(q.size()!=)
{
int t=q.front();
q.pop();
for(int i=;i<a[t].size();i++)
{
int v=a[t][i].first;
if(pd[v]) continue;
int w=a[t][i].second;
//cout<<"w="<<w<<endl; pd[v]=pdd[v]=;
dp[v]=dp[t]+w;
if(ans<dp[v])
{
ans=dp[v];
mark=v;
}
q.push(v);
}
}
return mark;
}
int f[];//压缩路径并查集
int die(int u)
{
if(f[u]==u) return u;
f[u]=die(f[u]);
return f[u];
}
int main()
{
int i,j,k,l,x,y,n,huan,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(pdd,false,sizeof(pdd));
huan=;anss=;
int u,v,c;
for(i=;i<=n;i++) f[i]=i,a[i].clear();//初始化father数组,同时清空上个输入留下的关系路径
for(i=;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&c);
x=die(u);y=die(v);
if(x!=y) f[x]=y;
else huan=; //代表能成环
a[u].push_back(p(v,c));
a[v].push_back(p(u,c));
}
if(huan)
{
printf("YES\n");
continue;
}
for(i=;i<=n;i++) //循环保证所有的点都被遍历过
{
if(!pdd[i])
{
int sb=bfs(i);
// cout<<ans<<endl;
// cout<<"sb="<<sb<<endl;
int hp=bfs(sb);
// cout<<ans<<endl;
anss=max(anss,dp[hp]);
}
} printf("%d\n",anss); } }
HDU4514 湫湫系列故事——设计风景线 ——树的直径/树形dp+判环的更多相关文章
- HDU 4514 湫湫系列故事——设计风景线 树的直径
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4514 湫湫系列故事--设计风景线 Time Limit: 5000/2000 MS (Java/Ot ...
- hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- Hdu 4514 湫湫系列故事——设计风景线
湫湫系列故事--设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- HDU 4514 湫湫系列故事——设计风景线(并查集+树形DP)
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- 刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)
题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探 ...
- HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- hdu 4514 湫湫系列故事――设计风景线(求树的直径)
随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置 ...
- 「日常训练」湫湫系列故事——设计风景线(HDU-4514)
题意与分析 中文题目,木得题意的讲解谢谢. 然后还是分解成两个任务:a)判环,b)找最长边. 对于这样一个无向图,强行转换成负权然后bellman-ford算法求最短是难以实现的,所以感谢没有环--我 ...
- HDU - 4514 湫湫系列故事——设计风景线(并查集判环)
题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n ...
随机推荐
- 转载,matla滤波函数
转载地址http://blog.sina.com.cn/s/blog_6163bdeb0102e1dj.html 滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选 ...
- robotframework接口之上传图片
python-requests及robotframework-RequestsLibrary实现multipart/form-data接口上传文件. 如Fiddle抓包截图: 实现如截图: 不要自己在 ...
- webpack 4.0 配置文件 webpack.config.js文件的放置位置
一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package ...
- 【Linux】Set CentOS no GUI default
[root@localhost ~]#vi /etc/inittab 重点看下面这部分代码 # 0 - halt (Do NOT set initdefault to this) ...
- Github上36893颗星!这个被称为下一代企业级应用首选技术你学了么?
用一句话概括:这个技术,是JAVA后端框架的龙头老大,执牛耳者.这个技术就是: Spring Boot春靴. Spring Boot到底凭什么成为Java社区最具影响力的项目?说直白点,他爹Spr ...
- 关于网站的一些js和css常见问题的记录
1. 文字超过宽度,给这个后面超过的文字用...来表示 white-space: nowrap;
- spring boot 整合 百度ueditor富文本
百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...
- 下载caffe慢
国内在github上下载软件慢,应在gitee下载git clone https://gitee.com/cuibixuan/caffe.git
- RoboMongo命令(版本:Robo 3T 1.1.1)
查询并排序db.getCollection('working_history').find({"identification" : "76170178"}).s ...
- html5 css多列布局
p{ text-indent: 2em; line-height: 2em;}h4{ -webkit-column-span:all; background: green; ...