Codefroces Gym 100781A(树上最长路径)
http://codeforces.com/gym/100781/attachments
题意:有N个点,M条边,问对两两之间的树添加一条边之后,让整棵大树最远的点对之间的距离最近,问这个最近距离是多少。
思路:一开始看成只有两个连通块,后来才注意到是多个连通块。DFS搜树上最长路径。答案有三种:第一种是添加了边之后,树的最长路径还是原来子树的路径,第二种是对子树长度进行排序后,两个最长的距离分别除以2向上取整后加上1。第三种比较难注意到,就是第二第三长的分别除以2向上取整后加上2,因为可能隔着一条边之后比第一种情况更长了。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define N 100010
struct node
{
int v, nxt;
}edge[N*];
int head[N], tot;
bool vis[N];
int ans[N];
int l; void add(int u, int v)
{
edge[tot].v = v; edge[tot].nxt = head[u]; head[u] = tot++;
} bool cmp(const int &a, const int &b)
{
return a > b;
} int dfs(int u)
{
vis[u] = ;
int m1 = , m2 = ;
for(int i = head[u]; ~i; i = edge[i].nxt) {
int v = edge[i].v;
if(vis[v]) continue;
int tmp = dfs(v) + ;
if(tmp > m1) {
m2 = m1, m1 = tmp;
} else if(tmp > m2) {
m2 = tmp;
}
}
if((m1 + m2) > l) l = m1 + m2;
return m1;
} int main()
{
int n, m;
scanf("%d%d", &n, &m);
memset(vis, , sizeof(vis));
memset(head, -, sizeof(head));
memset(ans, , sizeof(ans));
tot = ;
for(int i = ; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
add(u, v); add(v, u);
}
int cnt = , res = ;
for(int i = ; i < n; i++) {
if(!vis[i]) {
l = ;
dfs(i); //搜树上最长路径
if(l > res) res = l; //第一种情况
ans[cnt++] = l;
}
}
sort(ans, ans + cnt, cmp);
if(cnt > ) res = max(res, (ans[] + ) / + (ans[] + ) / + ); //第二种情况
if(cnt > ) res = max(res, (ans[] + ) / + (ans[] + ) / + ); //第三种情况
printf("%d\n", res);
return ;
}
Codefroces Gym 100781A(树上最长路径)的更多相关文章
- 【POJ 3162】 Walking Race (树形DP-求树上最长路径问题,+单调队列)
		
Walking Race Description flymouse's sister wc is very capable at sports and her favorite event is ...
 - SPOJ 1825 经过不超过K个黑点的树上最长路径 点分治
		
每一次枚举到重心 按子树中的黑点数SORT一下 启发式合并 #include<cstdio> #include<cstring> #include<algorithm&g ...
 - poj 3310(并查集判环,图的连通性,树上最长直径路径标记)
		
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...
 - HDU 2196 Computer (树上最长路)【树形DP】
		
<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...
 - ubuntu 终端设置(颜色与长路径)
		
Linux给人最大的享受就是可以根据个人喜好去定制令自己舒服的系统配置,像终端颜色的设置就是一个典型的例子. 图1 系统默认状态下的终端显示 在没有经过自定义配置的终端下工作久了,难免容易疲劳 ...
 - hdu 4607 Park Visit(树上最长链)
		
求树上最长链:两遍搜索. 第一次从树上任意点开始,最远点必然是某一条最长链上的端点u. 第二次从u开始,最远点即该最长链的另一端点. 先在最长链上走,不足再去走支链. 把询问数m错打成n,狠狠wa了一 ...
 - 中南大学oj 1317 Find the max Link 边权可以为负的树上最长路 树形dp 不能两遍dfs
		
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1317经典问题:树上最长路,边权可以为负值的,树形dp,不能用两边dfs.反例:5 41 2 22 ...
 - hdoj 2196 Computer【树的直径求所有的以任意节点为起点的一个最长路径】
		
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
 - AOE网上的关键路径(最长路径 + 打印路径)
		
题目描述 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图. AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG ...
 
随机推荐
- play 之定时器job
			
play定时任务之job 要创建一个Job,只需要简单地继承play.jobs.Job类就可以. 一些常用的注解: @Every("1h") 每隔1小时执行一次 @ ...
 - CSS文档流与块级元素和内联元素
			
CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...
 - ViewController 的代码规范
			
1.#pragma mark - life cycle viewDidLoad viewWillAppear 2.#pragma mark - delegate #pragma mark collec ...
 - 转:Busy Developers' Guide to HSSF and XSSF Features
			
Busy Developers' Guide to Features Want to use HSSF and XSSF read and write spreadsheets in a hurry? ...
 - RubyMine(基于IntelliJ IDEA的Ruby集成开发环境)快捷键
			
常用快捷键: 一级必会Ctrl+Alt+G:弹出GenerateCtrl+Alt+L:格式化代码Alt+F1:切换视图(Project, Structure, etc.).Alt+F2:弹出预览窗口, ...
 - Aspose.cell处理Excel
			
(一)从数据库中读取数据写入Excel中 方法1: 步骤:1.建立一个新的项目,引用动态链接库Aspose.dll 2.见下面的原代码 using System;using System.Collec ...
 - paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学
			
膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...
 - HttpUtility.HtmlEncode 方法
			
將字串轉換為 HTML 編碼的字串. 例如: publicstringWelcome(string name,int numTimes =1){ returnHttpUtility.HtmlE ...
 - JDBCTest
			
package com.atguigu.spring.jdbc; import java.sql.SQLException; import java.util.ArrayList; import ja ...
 - 夺命雷公狗ThinkPHP项目之----企业网站16之文章列表页的完善(关联查询)
			
我们栏目的所属栏目不能总是以数字来显示吧??这样的话,估计老板会让您直接卷铺盖滚蛋噢,嘻嘻... 所以我们需要对她进行关联查询,控制器代码如下所示: public function lists(){ ...