题目链接:https://vjudge.net/problem/HDU-4514

题意:判断没有没有环,如果没有环,通俗的讲就是找出一条最长的路,相当于一笔画能画多长。

思路:dfs判环。

最后就是没有环的情况了:最长的路的话,我们可以先从一个点A开始遍历所有边,找出最长的路,

但是,那个最长路不一定是一个图的最长路,只能说,从这个点A开始跑,跑到了B是A能跑出的最长路,

那么我们只需要再从B点跑一遍图,因为是一笔画,可能B跑到了C比A跑到B长。

那么B跑出的最长路就是从所有起点开始跑图的图的最长路了。

这个图可能是有很多不联通的子图组成,这个需要注意。


 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std; typedef long long LL;
#define inf (1LL << 25)
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
const int M = ; struct node{ int to;
int w;
int next;
}edge[M << ]; int head[N];
int cnt;//链式前向星
bool vis[N];
bool used[N]; //用于判断子图情况
int dis[N];
int n,m; void add(int u,int v,int w){ edge[cnt].to = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
} bool dfs(int pre,int now){ if(used[now]) return true;
else {
used[now] = true; for(int o = head[now]; ~o; o = edge[o].next){
int v = edge[o].to;
if(v == pre) continue;//与之前的点不冲突
if(dfs(now,v)) return true;
} return false;
}
} void dfs_d(int now){ vis[now] = true;
used[now] = true;
for(int o = head[now]; ~o; o = edge[o].next){
int v = edge[o].to;
int w = edge[o].w;
if(vis[v]) continue; dis[v] = dis[now] + w;
dfs_d(v);
}
} int work(int now){ rep(i,,n) dis[i] = ;
rep(i,,n) vis[i] = false;
dfs_d(now); //正跑 int index = -;
int len = -;
//找到最长的路
rep(i,,n){
if(len < dis[i]) len = dis[i],index = i;
} rep(i,,n) dis[i] = ;
rep(i,,n) vis[i] = false;
dfs_d(index);//反跑 rep(i,,n) len = max(len, dis[i]); return len;
} int main(){ ios::sync_with_stdio(false);
cin.tie(); int u,v,w;
while(cin >> n >> m){ cnt = ; //边数初始化
rep(i,,n) head[i] = -; //头初始化 rep(i,,m){
cin >> u >> v >> w; add(u,v,w);
add(v,u,w);
} rep(i,,n) used[i] = false; //连通图初始化
bool ok = true; //head[x] == -1 说明没有边和它相连,那不需要进入函数
rep(i,,n){
if(used[i] || head[i] == -) continue; //判断有没有环
if(dfs(,i)){
ok = false;
break;
}
} if(!ok) cout << "YES" << endl;
else{ int ans = -;
rep(i,,n) used[i] = false; //连通图初始化
rep(i,,n) if(!used[i]) if(head[i] != -) ans = max(ans, work(i)); cout << ans << endl;
}
} getchar(); getchar();
return ;
}

湫湫系列故事——设计风景线 HDU - 4514的更多相关文章

  1. HDU 4514 湫湫系列故事——设计风景线 树的直径

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4514 湫湫系列故事--设计风景线 Time Limit: 5000/2000 MS (Java/Ot ...

  2. HDU 4514 湫湫系列故事——设计风景线(并查集+树形DP)

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  3. Hdu 4514 湫湫系列故事——设计风景线

    湫湫系列故事--设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...

  4. hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  5. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  6. hdu 4514 湫湫系列故事――设计风景线(求树的直径)

    随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好.  现在已经勘探确定了n个位置 ...

  7. HDU - 4514 湫湫系列故事——设计风景线(并查集判环)

    题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n ...

  8. 刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)

    题目:   随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好.   现在已经勘探 ...

  9. HDU 4514 湫湫系列故事――设计风景线 (树形DP)

    题意:略. 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764 ...

随机推荐

  1. 给VS设置代码创建人的宏

    Sub AddFunComment() Dim DocSel As EnvDTE.TextSelection DocSel = DTE.ActiveDocument.Selection DocSel. ...

  2. 33 | 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(下)

  3. Web自动化测试 二 ----- HTML

    HTML 一.结构 html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <h1> 与 ...

  4. 微信小程序map组件z-index的层级问题

    说起微信小程序的map组件,可以说是良心之作了,一个组件解决了所以接入地图的所有麻烦,但是在实际小程序的试用过程中还是存在点问题的.如下情景:刚开始接入map组件的时候是在微信开发工具的模拟器上预览的 ...

  5. 关于elasticsearch安装及搭建集群时候的错误

    1,在Windows上解压后启动elasticsearch后可能cmd中会抛出java 无法初始话异常,网上查询必须用的是jdk1.8以上,可是本人用的 就是jdk1.8啊,半天解决无果,最后重新安装 ...

  6. Java 垃圾收集总结

    概述 垃圾收集(Garbage Collection,GC),它不是Java语言的伴生产物,它的历史比Java还要久远. 人们主要思考GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何 ...

  7. django项目中遇到要实现定时任务

    django项目中遇到要实现定时任务,所以选用了简单易用的django-crontab插件. 1.安装 django-crontab pip install django-crontab 2.定时要执 ...

  8. 剑指offer第二版-2.实现单例模式

    面试题2:实现单例模式 题目要求: 设计一个类,只能生成该类的一个实例. /** * 单例模式 * 定义:指实现了特殊模式的类,该类仅能被实例化一次,产生唯一的一个对象 * 应用举例:windows的 ...

  9. Spring MVC源码(三) ----- @RequestBody和@ResponseBody原理解析

    概述 在SpringMVC的使用时,往往会用到@RequestBody和@ResponseBody两个注解,尤其是处理ajax请求必然要使用@ResponseBody注解.这两个注解对应着Contro ...

  10. android布局几点随想

    1. 正式布局界面时,先在纸上画出整个布局,并考虑用什么布局比较适合: 2. 布局界面先做出框架,并用不同的背景颜色标记出来,确保大的布局框架式正确的: 3. 接着在每个大的布局框架内布局小的布局: ...