题目:

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

最新文章

  1. 【学习笔记】Struts2之一个Action包含多个控制处理逻辑
  2. Java中实现PHP中的urlencode与rawurlencode
  3. 在C#中,不安装Oracle客户端如何连接Oracle数据库
  4. 01C语言基础知识
  5. Kafka——分布式消息系统
  6. 整站HTTPS后的跨域请求 CORS是否还有效?
  7. RPC 135端口
  8. html5+监听设备加速度变化信息
  9. 函数fsp_header_init
  10. linux chmod 命令详解(转)
  11. ECSHOP订单一键发货简化订单发货流程
  12. Object-c学习之路十二(OC的copy)
  13. Android开发学习之路--百度地图之初体验
  14. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
  15. 【论文速读】XiangBai_TIP2018_TextBoxes++_A Single-Shot Oriented Scene Text Detector
  16. 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry
  17. php libev扩展使用
  18. linux回调函数的使用
  19. poj_2349 Kruskal 最小生成树
  20. Scrapy进阶

热门文章

  1. Distinct Values(贪心)
  2. python_94_类变量实例变量
  3. BCB:使用CppWebBrowser判断网页加载完成
  4. Python——函数的高级应用
  5. java基础—数组
  6. 利用Python的pyHook包来进行键盘监听
  7. jdk配置与环境变量配置
  8. ll1文法
  9. 01创建线程CreateThread和_beginthreadex
  10. java中的final关键字(2013-10-11-163 写的日志迁移