hdu 4514 并查集+树形dp

时间:2022-09-26 17:32:44

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

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 4539    Accepted Submission(s): 816

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
/*
hdu 4514 并查集+树形dp problem:
给你一个图,如果其中有环,则输出YES. 否则输出其中最长链的长度 solve:
通过并查集可以判断是否有环. 树形dp计算经过当前节点最长链的长度. hhh-2016-08-24 21:02:37
*/
#pragma comment(linker,"/STACK:124000000,124000000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <math.h>
#include <queue>
#include <map>
#define lson i<<1
#define rson i<<1|1
#define ll long long
#define clr(a,b) memset(a,b,sizeof(a))
#define scanfi(a) scanf("%d",&a)
#define scanfl(a) scanf("%I64d",&a)
#define key_val ch[ch[root][1]][0]
#define inf 0x3f3f3f3f
#define mod 1000003
using namespace std;
const int maxn = 100010;
int fa[maxn];
int head[maxn];
int dp[maxn];
int tot ;
void ini()
{
tot = 0;
memset(head,-1,sizeof(head));
memset(fa,-1,sizeof(fa));
memset(dp,-1,sizeof(dp));
}
struct node
{
int to,w,next;
} edge[maxn*20];
void add_edge(int u,int v,int w)
{
edge[tot].to = v,edge[tot].w = w,edge[tot].next = head[u],head[u] = tot ++;
} int fin(int x)
{
if(fa[x] == -1) return x;
return fa[x] = fin(fa[x]);
}
int tans = 0; int dfs(int now,int far)
{
int tnex = 0;
for(int i = head[now]; ~i; i = edge[i].next)
{
int v = edge[i].to;
if(v == far)
continue;
int re = dfs(v,now);
tans = max(tans,tnex+re +edge[i].w);
tnex = max(tnex,re + edge[i].w);
}
return dp[now] = tnex;
} int main()
{
int n,m;
int u,v,w;
// freopen("in.txt","r",stdin);
while(scanfi(n) != EOF)
{
scanfi(m);
ini();
int flag =0 ;
for(int i = 1; i <= m; i++)
{
scanfi(u),scanfi(v),scanfi(w);
add_edge(u,v,w);
add_edge(v,u,w);
int ta = fin(u);
int tb = fin(v);
if(ta == tb)
flag = 1;
else
fa[ta] = tb;
}
tans = 0;
if(flag)
printf("YES\n");
else
{
for(int i =1; i <= n; i++)
{
if(dp[i] == -1)
{
dfs(i,-1);
// cout <<tans << endl;
}
}
printf("%d\n",tans);
}
}
return 0;
}

  

hdu 4514 并查集+树形dp的更多相关文章

  1. Codeforces 1156D 0-1-Tree &lpar; 并查集 &vert;&vert; 树形DP &rpar;

    <题目链接> 题目大意: 给定一颗无向树,树的边权只要0/1两种情况,现在问你这棵树上存在多少对有序对<u,v>,满足u-->v的路径上,如果出现边权为1的边之后,就不能 ...

  2. HDU 4514 湫湫系列故事——设计风景线(并查集&plus;树形DP)

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

  3. HDU 5575 Discover Water Tank 并查集 树形DP

    题意: 有一个水槽,边界的两块板是无穷高的,中间有n-1块隔板(有高度),现有一些条件(i,y,k),表示从左到右数的第i列中,在高度为(y+0.5)的地方是否有水(有水:k = 1),问最多能同时满 ...

  4. BZOJ&lowbar;2443&lowbar;&lbrack;Usaco2011 Open&rsqb;奇数度数 &lowbar;并查集&plus;树形DP

    BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集. Description 奶牛们遭到了进攻!在他们的*里,有N(1 <= N <=50,000)个城市,由M(1 ...

  5. P2700逐个击破&lpar;并查集&sol;树形dp&rpar;

    P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,老毛同志 ...

  6. HDU 4514并查集判环&plus;最长路

    点击打开链接 题意:中文题...... 思路:先推断是否能成环,之前以为是有向图,就用了spfa推断,果断过不了自己出的例子,发现是无向图.并查集把,两个点有公共的父节点,那就是成环了,之后便是求最长 ...

  7. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

  8. HDU 4496 并查集 逆向思维

    给你n个点m条边,保证已经是个连通图,问每次按顺序去掉给定的一条边,当前的连通块数量. 与其正过来思考当前这边会不会是桥,不如倒过来在n个点即n个连通块下建图,检查其连通性,就能知道个数了 /** @ ...

  9. &lbrack;HDU 5293&rsqb;Tree chain problem&lpar;树形dp&plus;树链剖分&rpar;

    [HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...

随机推荐

  1. Java 三章错题

    1.每个类都使用Object作为超类.所以对象(包括数组)都实现这个类的方法. 2.在不明确给出超类的情况下,java会自动把object作为要定义的超类. 可以使用类型为Object的变量指向任意类 ...

  2. Unhandled exception at 0x&period;&period;&period;&period;&period;&period;&period;&period; in XXXX&period;exe&colon; 0xC0000005&colon;错误

    对于C++初学者或粗心者,很容易犯如下图所示错误:     那么该错误是由什么造成的呢?   答案无疑只有一个,即:读取了本该没有的值或者地址.   那么如何解决呢?   第一件事,检查下你传入的参数 ...

  3. azure之MSSQL服务性能测试

    azure给我们提供非常多的服务而这些服务可以让企业轻而易举地在上构建一个健壮的服务体系.但在使用azure的相关产品服务时还是应该对相关的服务有一些简单的性能了解才能更好的让企业购买适合自己的服务产 ...

  4. spring mvc出现 Failed to convert property value of type &&num;39&semi;java&period;lang&period;String&&num;39&semi; to required type &&num;39&semi;java&period;util&period;Date&&num;39&semi; for property &&num;39&semi;endtime&&num;39&semi;

    在使用spring mvc中,绑定页面传递时间字符串数据给Date类型是出错: Failed to convert property value of type [java.lang.String] ...

  5. css hack 大全 各个浏览器的css

    各个浏览器的css hack区别属性: IE6: _zoom:1; IE6/7: *zoom:1; IE6/7/8/9 :\9 各个浏览器的css hack区别规则 IE6: *html{} IE7: ...

  6. AngularJS with MVC4 CRUD

    CRUD using MVC Web API and AngularJS In this article I am going to demonstrate about how can we crea ...

  7. 请问如何查询一个APP的Android和iOS下载量?

    作者:Jasmine Jiang链接:http://www.zhihu.com/question/28533067/answer/87871598来源:知乎著作权归作者所有,转载请联系作者获得授权. ...

  8. bzoj 1880&colon; &lbrack;Sdoi2009&rsqb;Elaxia的路线

    Description 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希 ...

  9. 在Node&period;js使用Promise的方式操作Mysql

    最近在学习Node.js,虽然早就听说了回调地狱结果过了一周就遇到了.所以花时间学习了了一下Promise.虽然还有Async/await.co.生成器等选择,但是因为本人基础较差,以及时间问题所以决 ...

  10. Java 通过先序中序序列生成二叉树

    题目 二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证. 输入: 1 2 3 4 5 6 7 8 9 10 3 2 5 4 1 7 8 6 10 9 ...