这个题标签为什么会有网络流。。

首先树的直径求法就是两遍dfs

然后以其中一个为树的根,统计子树到节点的最长距离与次长距离:

符合条件的点一定是最长距离唯一的,且次长距离与到根的距离不相等

注:

1、同级语句的顺序

2、long long

码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 500000
int hou[N],tot,xia[N],a,b,c,fu[N],zhong[N],id[N],ans,n,m,i,j;
long long v[N],d[N],d2[N],maxx;
void jian(int a,int b,long long c)
{++tot;hou[tot]=xia[a];xia[a]=tot;zhong[tot]=b;v[tot]=c;
}
void jia(int a,int b,long long c)
{jian(a,b,c);jian(b,a,c);
}
void dfs(int o,int fa)
{
int i;
d[o]=0;
id[o]=o;
for(i=xia[o];i!=0;i=hou[i])
{
int nd=zhong[i];
if(nd==fa)continue;
dfs(nd,o);
if(d[nd]+v[i]>d[o])d[o]=d[nd]+v[i],id[o]=id[nd];
}
}
void dp(int o,int fa)
{int i;fu[o]=fa;id[o]=0;for(i=xia[o];i!=-1;i=hou[i]){int nd=zhong[i];if(nd==fa)continue;dp(nd,o);if(d[nd]+v[i]==d[o]){id[o]=1;}else if(d[nd]+v[i]>d[o]){id[o]=0;d2[o]=d[o];d[o]=d[nd]+v[i];}else    if(d[nd]+v[i]>d2[o])d2[o]=d[nd];}
}
int main()
{   memset(xia,-1,sizeof(xia));scanf("%d",&n);for(i=1;i<n;i++){scanf("%d%d%d",&a,&b,&c);jia(a,b,c);       }dfs(1,0);int st=id[1];dfs(st,0);int nd=id[st];maxx=d[st];printf("%lld\n",maxx);memset(d,0,sizeof(d));dp(st,0);int o=nd,ans=0;while(o){//cout<<o;if(id[o]==1&&d2[o]==maxx-d[o]){ans=0;break;}if(d2[o]==maxx-d[o]){break;}if(id[o]==0){++ans;}if(id[o]==1){ans=1;}o=fu[o];}if(o==st)ans--;printf("%d",ans);
}

bzoj3124 [Sdoi2013]直径 直径+树形dp相关推荐

  1. [BZOJ3197][Sdoi2013]assassin(树形DP+树同构+二分图最优匹配)

    关于树同构,有一个神奇的性质: 一棵树的重心只有 111 个或 2" role="presentation" style="position: relative ...

  2. 图论--树的直径--DFS+树形DP模板

    #include <iostream> #include <cstring> using namespace std;//maxv:源点能到的最远点,maxdis:最远点对应的 ...

  3. Acwing1072 树的最长路径(树的直径)树形Dp 记忆化搜索

    题目描述 原题链接: https://www.acwing.com/problem/content/1074/ 思路 以下针对树的边权都一样的情况. 推荐使用BFS, 比赛的时候栈空间只有1MB,DF ...

  4. HDU - 6769-In Search of Gold-二分+树形dp

    https://vjudge.net/problem/HDU-6769 题目大意:给你n个点,有n-1条边,每条边有a,b两个权值,给你一个k,恰好有k条边的权值取a,其余取b的时候,树的直径的最小值 ...

  5. codeforces 1083 A. The Fair Nut and the Best Path(树形dp)

    题目大意: 每个节点都给定一个值a[i],从一个节点走到另一个节点会消耗固定值w,但也会得到这个节点的价值,问怎样走才能得到最大的价值. 解题思路: 这个题和树形dp求树的直径差不多(树形DP基本都是 ...

  6. 树上子链(树形dp求树的直径)

    树上子链 题意: 给定一棵树 T ,树 T 上每个点都有一个权值. 定义一颗树的子链的大小为:这个子链上所有结点的权值和 . 请在树 T 中找出一条最大的子链并输出. 题解: 求树的直径,题目中存在负 ...

  7. C++剑指offer:[POJ]2631 Roads in the North - 用树形DP的方式求出一棵树的直径

    前言 此题是道很简单的题(做法不单一,不仅只有树形DP的方法) 做完了这道题才发现此题原来是一道求树的直径的题,也就是求树上两个节点的最大距离. 题目 问题 N(2692): [POJ2631]北极地 ...

  8. [WC2018]通道——边分治+虚树+树形DP

    题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个 ...

  9. hdu2196 树形DP

    题意:       给你一棵树,求出每一个点到其他点的最大距离. 思路:       每个点的最大距离只有两种情况,1是自己忘下面走的最大,二是网上走的最大,取他们的最大便是答案,每个点网下面的最大可 ...

  10. POJ 1655 Balancing Act[树的重心/树形dp]

    Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...

最新文章

  1. 总结—elasticsearch启动失败的几种情况及解决
  2. 从涂鸦到发布 —— 理解API的设计过程
  3. 【powerdesigner】将pdm或者cdm保存为普通图片格式
  4. 一部手机可以对多个开发者账号开启双重认证吗?
  5. nit计算机应用基础是考试大纲,NIT考试大纲--计算机应用基础.doc
  6. Docker初识与安装
  7. LIBUV学习笔记(三)libuv中pipe/tty相关操作以及一个简单的unix域回射服务器/客户端例子...
  8. JavaScript 丨 你不知道的arguments
  9. java 如何去掉http debug日志_Java高手如何搭建高效易用的日志系统
  10. fiddler抓包教程
  11. autosar 与osek 的nm
  12. 内存分配方式与内存分配算法
  13. 2018年12月份计算机,CPU天梯图2018年12月最新版 十二月台式电脑CPU性能排行
  14. 为什么越来越多的人选择FUP T10S系列超声波探伤仪
  15. 【附源码】计算机毕业设计java-志愿者管理系统设计与实现
  16. 玩转Linux操作系统常见操作,包括VMware安装,DHCP,DNS,Sendmail,NCSA验证,Apache,反向代理,webalizer,创建oracle用户,赋权,挂载
  17. 父爱动画代码python_情人节锦囊:简单的python表白程序(动画效果)
  18. iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
  19. HUAWEI交换机的Hybrid接口(混杂模式)详解与实验配置演示
  20. 使用.NET 将PDF转成Word

热门文章

  1. m1 Mac的brew包完全卸载方法
  2. python小工具(一)
  3. jdbctemplate 开启事务_浅入浅出 Spring 事务传播实现原理
  4. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
  5. php sql查看本月记录,SQL Server 获取本周,本月,本年等时间内记录
  6. .netcore excel导出回车换行_必须掌握的回车键Enter应用技巧,100%干货
  7. python中easygui和tkinter_python easygui Tkinter
  8. python安装成功的图标_安装Python
  9. php员工删除,php+mysql删除指定编号员工信息的方法_PHP
  10. android点击出现菜单,Android 点击按钮弹出菜单