题目链接: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. MagicBook屏幕频闪解决方案(Windows、MacOS)

    对于已经看到这篇文章的小伙伴们,就不解释何为PWM调光频闪了. MagicBook笔记本性价比高,但屏幕素质确实很一般,我们人眼看不出来的频闪,实际对眼睛损害很大,如图(需要设置快门参数,如1/400 ...

  2. BZOJ 1061:志愿者招募(单纯型)

    题目链接 题意 中文题意. 思路 单纯型模板题. 单纯型用来解决线性规划问题. 留坑待填. 算法思路 好长 模板 论文 卿学姐视频 #include <bits/stdc++.h> usi ...

  3. Codeforces 617E:XOR and Favorite Number(莫队算法)

    http://codeforces.com/problemset/problem/617/E 题意:给出n个数,q个询问区间,问这个区间里面有多少个区间[i,j]可以使得ai^ai+1^...^aj ...

  4. django的阶段总结

    Django回顾 1 web应用 本质是基于socket实现的应用程序 浏览器-----------服务器 2 http协议:应用层协议 1 基于TCP协议 2 基于请求响应 3 短连接 4 无状态保 ...

  5. IDEA永久使用

    IDEA永久使用 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载下面图片中箭头所指的部分 下载完成后双击打开,除了以下图片提示内容,一路下一步 ...

  6. 谷歌地球 Google Earth v7.3.2.5495 专业版

    谷歌地球(Google Earth,GE)是一款谷歌公司开发的虚拟地球软件,它把卫星照片.航空照相和GIS布置在一个地球的三维模型上.谷歌地球于2005年向全球推出,被<PC 世界杂志>评 ...

  7. Linux使用httpd配置反代理

    Linux安装httpd请看上一篇:https://www.cnblogs.com/tuituji27/p/11189095.html 首先,httpd默认监听端口号是80,增加或修改代理的端口号的文 ...

  8. 多线程总结-同步之ReentrantLock

    目录 1 ReentrantLock与synchronized对比 2.示例用法 2.1 基本用法 2.2 尝试锁 2.3 可打断 2.4 公平锁 1 ReentrantLock与synchroniz ...

  9. Spring Boot 2.0 迁移指南

    ![img](https://mmbiz.qpic.cn/mmbiz_jpg/1flHOHZw6Rs7yEJ6ItV43JZMS7AJWoMSZtxicnG0iaE0AvpUHI8oM7lxz1rRs ...

  10. C程序中可怕的野指针

    一.疑问点指针是C语言一个很强大的功能,同时也是很容易让人犯错的一个功能,用错了指针,轻者只是报个错,重者可能整个系统都崩溃了.下面是大家在编写C程序时,经常遇到的一种错误的使用方法,也许在你的学习和 ...