刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)
题目:
现在已经勘探确定了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
题解
模板题不多说···主要是做这道题时给我的一个惨痛教训···我‘读入剪枝’了,也就是判环的时候发现环直接break掉了··导致一直没找出来···
代码:
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cmath>
- #include<ctime>
- #include<cctype>
- #include<string>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=1e6+;
- const int M=1e6+;
- int tot,fst[N],nxt[M*],go[M*],val[M*],n,m,father[N],dis1,p1,dis2,ans;
- bool visit[N];
- inline int getfa(int a)
- {
- if(father[a]==a) return a;
- else return father[a]=getfa(father[a]);
- }
- inline int R()
- {
- char c;int f=;
- for(c=getchar();c<''||c>'';c=getchar());
- for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
- return f;
- }
- inline void comb(int a,int b,int c)
- {
- nxt[++tot]=fst[a],fst[a]=tot,go[tot]=b,val[tot]=c;
- nxt[++tot]=fst[b],fst[b]=tot,go[tot]=a,val[tot]=c;
- }
- inline void dfs1(int u,int fa,int len)
- {
- visit[u]=true;
- if(len>dis1){dis1=len,p1=u;}
- for(int e=fst[u];e;e=nxt[e])
- {
- int v=go[e];if(v==fa) continue;
- dfs1(v,u,len+val[e]);
- }
- }
- inline void dfs2(int u,int fa,int len)
- {
- if(len>dis2) dis2=len;
- for(int e=fst[u];e;e=nxt[e])
- {
- int v=go[e];if(v==fa) continue;
- dfs2(v,u,len+val[e]);
- }
- }
- int main()
- {
- while(~scanf("%d%d",&n,&m))
- {
- int a,b,c;memset(fst,,sizeof(fst));memset(visit,false,sizeof(visit));
- tot=;bool flag=false;ans=;
- for(int i=;i<=n;i++) father[i]=i;
- for(int i=;i<=m;i++)
- {
- a=R(),b=R(),c=R();comb(a,b,c);
- if(flag==true) continue;
- int fa=getfa(a),fb=getfa(b);
- if(fa==fb){cout<<"YES"<<"\n";flag=true;}
- father[fa]=fb;
- }
- if(flag) continue;
- for(int i=;i<=n;i++)
- {
- if(!visit[i])
- {
- dis1=,p1=,dis2=;
- dfs1(i,,);dfs2(p1,,);ans=max(ans,dis2);
- }
- }
- cout<<ans<<endl;
- }
- return ;
- }
刷题总结——湫湫系列故事——设计风景线(hdu4514 并差集判环+树的直径)的更多相关文章
- HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- HDU 4514 湫湫系列故事——设计风景线(并查集+树形DP)
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- Hdu 4514 湫湫系列故事——设计风景线
湫湫系列故事--设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- HDU 4514 湫湫系列故事——设计风景线 树的直径
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4514 湫湫系列故事--设计风景线 Time Limit: 5000/2000 MS (Java/Ot ...
- hdu 4514 湫湫系列故事――设计风景线(求树的直径)
随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n个位置 ...
- HDU - 4514 湫湫系列故事——设计风景线(并查集判环)
题目: 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好. 现在已经勘探确定了n ...
- HDU4514 湫湫系列故事——设计风景线 ——树的直径/树形dp+判环
中文题面,给出一个图,问能不能成环,如果可以就输出YES.否则输出该树的直径. 这里的判环我们用路径压缩的并查集就能很快的判断出来,可以在输入的同时进行判断.这题重点就是求树的直径. 树直径的性质可以 ...
- HDU 4514 湫湫系列故事――设计风景线 (树形DP)
题意:略. 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764 ...
随机推荐
- c++文件偏移
#include <iostream> #include <fstream> #include <cassert> using namespace std; int ...
- iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七
不知大家有没有遇见过自己写的tableview被导航栏遮挡住的问题,反正我是遇见过! 因为在ios7以后所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的 ...
- NSRegularExpression
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAAU2CAIAAABFtaRRAAAAAXNSR0IArs4c6QAAAe9pVFh0WE1MOm
- 【AC自动机】bzoj4327: JSOI2012 玄武密码
题目思路没话讲:主要是做题时候的细节和经验 Description 在美丽的玄武湖畔,鸡鸣寺边,鸡笼山前,有一块富饶而秀美的土地,人们唤作进香河.相传一日,一缕紫气从天而至,只一瞬间便消失在了进香河中 ...
- [BZOJ] 1563: [NOI2009]诗人小G
1D/1D的方程,代价函数是一个p次函数,典型的决策单调性 用单调队列(其实算单调栈)维护决策点,优化转移 复杂度\(O(nlogn)\) #include<iostream> #incl ...
- 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神
一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...
- Spring Boot 应用 快速发布到linux服务器的脚本代码示例
前提说明:spring boot 应用打包成jar包之后要部署到Linux服务器上面运行,我用的nohup java -jar 命令,但是代码更新之后重新部署的时候覆盖原来的项目,又要手动运行ps - ...
- mysql替换表中某字段的某值
UPDATE `cases` SET `case_desc` = replace(`case_desc`, 'src="//tuku-assets.m.jia.com/assets/i ...
- Altium Designer入门学习笔记3:关于各模块分开布线的理解( 1)
观看"杜洋AD的讲解视频",杜洋着重强调了"模块分开"布线的好处. ---------------------------------------------- ...
- selection problem-divide and conquer
思路: 随机选取列表中的一个值v,然后将列表分为小于v的,等于v的,大于v的三组.对于k<=left.size()时, 在left中执行selection:落在中间的,返回v:k>left ...