湫湫系列故事——设计风景线

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;
}

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)湫湫系列故事——设计风景线(树形DP+并查集)

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

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

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

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

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

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

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

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

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

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

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

  9. 湫湫系列故事——设计风景线 HDU - 4514

    题目链接:https://vjudge.net/problem/HDU-4514 题意:判断没有没有环,如果没有环,通俗的讲就是找出一条最长的路,相当于一笔画能画多长. 思路:dfs判环. 最后就是没 ...

随机推荐

  1. cloud-utils cloud-utils-growpart cloud-init

  2. CentOS的Redis内存分配策略配置

    安装了一主两从节点,启动之后发现有一个警告: 大概是说overcommit_memory设置成了0,在低内存环境下后台保存可能会失败,设置成1重启可解决. 然后,不太懂这个配置的含义,google一把 ...

  3. Modules you should know in Python Libray

    前两天被问到常用的python lib和module有哪些?最常用的那几个,其他的一下子竟然回答不上.想想也是,一般情况下,遇到一个问题,在网上一搜,顺着线索找到可用的例子,然后基本没有怎么深究.结果 ...

  4. 织梦/dedecms 当文章转载时不需要设置图片水印的设置,取消’图片是否加水印‘的复选框,并且修改如下文件即可生效

    当想添加水印是选中“图片是否加水印”复选框即可. 找到include/helpers/image.helper.php这个文件,在里面找到中的if( isset($GLOBALS['needwater ...

  5. Objective-C中一种消息处理方法performSelector: withObject:

    Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法.所以Objective-C可以在runtime的 ...

  6. Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值

    利用了大约一个多小时来搞明确OC中Blocks反向传值和Swift中Closure反向传值的区别,以下直接贴上代码: 一.第一个界面 // Created by 秦志伟 on 14-6-13. imp ...

  7. 開始Unity3D的学习之旅

    前言:这个系列的文章纯属对自己学习的整理,非高手之作.但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程.争取每周整理一次吧.之所以会開始学Unity3D,最基本的原因是由于在快放暑假的时 ...

  8. linux 定时任务计划

    crond: unrecognized service 无crond解决办法 安装计划任务:yum -y install vixie-cron

  9. AIR lame参数配置

    -Duser.name=Z.yu 固定码率的例子:=======================================================================固定码率 ...

  10. Mysql 半同步复制配置

    以下是配置和监控半同步复制: 1. 半同步复制功能以plugin的方式接入MySQL,需要在主库与从库两端同时开启半同步的支持,具体配置如下: On the master mysql> INST ...