湫湫系列故事——设计风景线
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 4000
Accepted Submission(s): 715
Problem Description
  随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好。
  现在已经勘探确定了n个位置可以用来建设,在它们之间也勘探确定了m条可以设计的路线以及他们的长度。请问是否能够建成环形的风景线?如果不能,风景线最长能够达到多少?
  其中,可以兴建的路线均是双向的,他们之间的长度均大于0。
Input
  测试数据有多组,每组测试数据的第一行有两个数字n, m,其含义参见题目描述;
  接下去m行,每行3个数字u v w,分别代表这条线路的起点,终点和长度。
  [Technical Specification]
  1. n<=100000
  2. m <= 1000000
  3. 1<= u, v <= n
  4. w <= 1000
Output
  对于每组测试数据,如果能够建成环形(并不需要连接上去全部的风景点),那么输出YES,否则输出最长的长度,每组数据输出一行。
Sample Input
3 3
1 2 1
2 3 1
3 1 1
Sample Output
YES
Source
2013腾讯编程马拉松初赛第二场(3月22日)
Recommend
liuyiding

/*
BFS判环+BFS最长链.
T.
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define MAXN 100001
#define MAXM 1000001
using namespace std;
int head[MAXN],n,m,tot,dfn[MAXN],x[MAXN],y[MAXN],z[MAXN],maxtot,maxt,dis[MAXN];
bool b[MAXN];
struct data{int v,next,x;
}e[MAXM];
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*f;
}
void add(int u,int v,int x){e[++tot].v=v;e[tot].x=x;e[tot].next=head[u];head[u]=tot;
}
bool check(){queue<int>q;q.push(1);b[1]=true;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].next){int v=e[i].v;if(b[v])return true;else b[v]=true,q.push(v);}}return false;
}
int bfs(int u){memset(dis,-1,sizeof(dis));dis[u]=0;queue<int>q;q.push(u);while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=e[i].next){int v=e[i].v;if(dis[v]==-1){dis[v]=dis[u]+e[i].x;q.push(v);if(dis[v]>maxtot){maxtot=dis[v];maxt=v;}}}}return maxt;
}
void slove(){maxtot=0;memset(b,0,sizeof(b));if(check()) printf("YES\n");else{for(int i=1;i<=m;i++)add(y[i],x[i],z[i]);int t=bfs(1);bfs(t);printf("%d\n",maxtot);}
}
int main()
{while(scanf("%d%d",&n,&m)!=EOF){for(int i=1;i<=m;i++){tot=0;x[i]=read();y[i]=read();z[i]=read();add(x[i],y[i],z[i]);}slove();}return 0;
}
/*
DFS判环+DFS最长链.
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define MAXN 100001
#define MAXM 1000001
using namespace std;
int head[MAXN],n,m,tot,dfn[MAXN],maxtot,maxt,dis[MAXN],tmp[MAXN];
struct data{int v,next,x;
}e[MAXM];
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*f;
}
void add(int u,int v,int x){e[++tot].v=v;e[tot].x=x;e[tot].next=head[u];head[u]=tot;
}
bool check(int pre,int u){dfn[u]=true;for(int i=head[u];i;i=e[i].next){int v=e[i].v;if(v==pre) continue;if(dfn[v]) return true;dis[v]=dis[u]+e[i].x;if(check(u,v)) return true;}return false;
}
void slove(){maxtot=0;bool flag=0;memset(dfn,0,sizeof(dfn));for(int i=1;i<=n;i++){if(dfn[i]) continue;if(check(0,i)) {flag=1;printf("YES\n");break;}int u=max_element(dis+1,dis+1+n)-dis;  memcpy(tmp,dfn,sizeof(dfn)); memset(dfn,false,sizeof(dfn));  memset(dis,0,sizeof(dis));check(0,u);maxtot=max(maxtot,*max_element(dis+1,dis+1+n));memcpy(dfn,tmp,sizeof(dfn));}if(flag) return ;else printf("%d\n",maxtot);
}
int main()
{int x,y,z;while(~scanf("%d%d",&n,&m)){tot=0;memset(head,0,sizeof(head));for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);//x=read();y=read();z=read();add(x,y,z);add(y,x,z);}slove();}return 0;
}

转载于:https://www.cnblogs.com/nancheng58/p/6070790.html

Hdu 4514 湫湫系列故事——设计风景线相关推荐

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

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

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

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

  3. HDU 4514 湫湫系列故事——设计风景线 (并查集)

    判断有没有环路,我个人认为还是并查集效率要高,而且复杂度要比dfs低,性价比很好 这道题的要求,第一判断是否有环,如果没有环,就输出最长的路径 我们可以想到一个无向图如果没有环的话,一定就是两种形态, ...

  4. 路径空间HDOJ 4514 - 湫湫系列故事——设计风景线 并查集+树型DP

    最近研究路径空间,稍微总结一下,以后继续补充: 题意有没说楚清的...两点间最多一条路径.... 先用并查集检查无向图否是有环... 若干个无环的无向图就是一丛林了... 那么目题转化为在一棵树上找最 ...

  5. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 1 //#pragma ...

  6. HDU 4513 吉哥系列故事――完美队形II(Manacher)

    题目链接:[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher V - 吉哥系列故事――完美队形II 题意 吉哥又想出了一个新的完美队形游戏! 假设有n个人 ...

  7. HDU 4512 吉哥系列故事――完美队形I(最长公共上升子序列)

    吉哥系列故事--完美队形I Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  8. HDU 4502 吉哥系列故事——临时工计划(动态规划)

    吉哥系列故事--临时工计划                                                                                      T ...

  9. HDU 4505 小Q系列故事——电梯里的爱情

    小Q系列故事--电梯里的爱情                                                                                   Tim ...

最新文章

  1. C ++变量,文字和常量
  2. 单纯形法(三)(概念部分)
  3. C++CTime使用方法
  4. 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
  5. 微信小程序开发教程第七章:微信小程序编辑名片页面开发
  6. 求从n个数组任意选取一个元素的所有组合
  7. CAP 2.6 版本发布通告
  8. 社会生存的75条忠告----胜读十年书【转】
  9. 说了这么多 5G,最关键的技术在这里
  10. JavaScriptjQuery.函数
  11. Python之路-(列表、元组、字典、集合、字符串)
  12. html解决ajax调用跨域,JQuery Ajax执行跨域请求数据的解决方案
  13. 谷歌浏览器搜索框记录_如何清除您的Google搜索记录
  14. Python+Django开发游戏充值管理后台
  15. 平时使用计算机时有哪些不安全的做法,KVM设备在使用时都有哪些安全隐患?
  16. html5防止屏幕休眠,防止休眠或屏幕关闭插件
  17. UG NX 12 基准轴
  18. 云服务器系统镜像选什么,云服务器系统镜像选什么用
  19. 数学四大思想八大方法_中考数学专题五,四种数学思想方法,第3个比较难掌握...
  20. 阿里云服务器带宽下载上传速度表(1Mbps是128KB/s)

热门文章

  1. python求字符串的所有子集_打印一字符串的所有子集 | 学步园
  2. thinkphp json_原创干货 | Thinkphp序列化合总
  3. mock 抛出一个异常如何终止_教你使用Mock完成单元测试
  4. String大小转换函数
  5. 计算机管理没有打印机列队,在Windows清除打印队列如果打印机被卡住,也没有打印输出...
  6. 关于n对角矩阵数据结构_机器学习与线性代数 - 特殊矩阵
  7. 小米4系统定位服务器地址,小米4原装浏览器怎么开启定位系统
  8. s905各种型号的区别_梯式桥架和槽式桥架的区别介绍
  9. 将 Citavi 笔记按需要导出
  10. 什么是高清DVI光端机?dvi光端机的技术参数及应用有哪些?