bzoj 1912 巡逻(树直径)
Description

Input
Output
Sample Input
1 2
3 1
3 4
5 3
7 5
8 5
5 6
Sample Output
HINT
10%的数据中,n ≤ 1000, K = 1;
30%的数据中,K = 1;
80%的数据中,每个村庄相邻的村庄数不超过 25;
90%的数据中,每个村庄相邻的村庄数不超过 150;
100%的数据中,3 ≤ n ≤ 100,000, 1 ≤ K ≤ 2。
- #include<algorithm>
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<iostream>
- int tot,go[],first[],next[];
- int op[];
- int vis[],dis[],c[],from[],pre[];
- int d[],n,k,ans,Mx2,val[];
- void insert(int x,int y,int z){
- tot++;
- go[tot]=y;
- next[tot]=first[x];
- first[x]=tot;
- val[tot]=z;
- }
- void add(int x,int y,int z){
- insert(x,y,z);op[tot]=tot+;
- insert(y,x,z);op[tot]=tot-;
- }
- void bfs(int x){
- int h=,t=;
- for (int i=;i<=n;i++) pre[i]=from[i]=;
- for (int i=;i<=n;i++) vis[i]=,dis[i]=;
- c[]=x;vis[x]=;dis[x]=;
- while (h<=t){
- h++;
- for (int i=first[c[h]];i;i=next[i]){
- int pur=go[i];
- if (vis[pur]) continue;
- pre[pur]=c[h];
- from[pur]=i;
- vis[pur]=;c[++t]=pur;dis[pur]=dis[c[h]]+val[i];
- }
- }
- }
- void pianfen1(){
- bfs();
- int mx=;
- for (int i=;i<=n;i++) if (dis[i]>dis[mx]) mx=i;
- bfs(mx);
- Mx2=;
- for (int i=;i<=n;i++) if (dis[Mx2]<dis[i]) Mx2=i;
- if (k==) printf("%d\n",*(n-)-dis[Mx2]+);
- }
- void dfs(int x){
- d[x]=,vis[x]=;int mx1=,mx2=;
- for (int i=first[x];i;i=next[i]){
- int pur=go[i];
- if (vis[pur]) continue;
- dfs(pur);
- if (d[pur]+val[i]>mx1) mx2=mx1,mx1=d[pur]+val[i];
- else
- if (d[pur]+val[i]>mx2) mx2=d[pur]+val[i];
- }
- if (mx1+mx2>ans) ans=mx1+mx2;
- d[x]=mx1;
- }
- int main(){
- scanf("%d%d",&n,&k);
- for (int i=;i<n;i++){
- int x,y;
- scanf("%d%d",&x,&y);
- add(x,y,);
- }
- pianfen1();
- int cnt=*(n-)-dis[Mx2]+;
- if (k==) return ;
- for (int i=;i<=n;i++) vis[i]=,d[i]=0x3f3f3f3f;
- for (int i=Mx2;i!=;i=pre[i]) val[from[i]]=-,val[op[from[i]]]=-;
- ans=;
- dfs();
- printf("%d\n",cnt-ans+);
- }
bzoj 1912 巡逻(树直径)的更多相关文章
- BZOJ 1912 巡逻(算竞进阶习题)
树的直径 这题如果k=1很简单,就是在树的最长链上加个环,这样就最大化的减少重复的路程 但是k=2的时候需要考虑两个环的重叠部分,如果没有重叠部分,则和k=1的情况是一样的,但是假如有重叠部分,我们可 ...
- BZOJ 1912(树的直径+LCA)
题面 传送门 分析 显然,如果不加边,每条边都要走2次,总答案为2(n-1) 考虑k=1的朴素情况: 加一条边(a,b),这条边和树上a->b的路径形成一个环,这个环上的边只需要走一遍,所以答案 ...
- BZOJ 1912 巡逻
重赋边权. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...
- HDU 4607 Park Visit 两次DFS求树直径
两次DFS求树直径方法见 这里. 这里的直径是指最长链包含的节点个数,而上一题是指最长链的路径权值之和,注意区分. K <= R: ans = K − 1; K > R: ans = ...
- [HDOJ2196]Computer (树直径, 树DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 给一棵树,求树上各点到某点的距离中最长的距离.注意每个点都要求. 和普通求树的直径不一样,要求每 ...
- [HDOJ4612]Warm up(双连通分量,缩点,树直径)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4612 所有图论题都要往树上考虑 题意:给一张图,仅允许添加一条边,问能干掉的最多条桥有多少. 必须解决 ...
- BZOJ 2243 染色 | 树链剖分模板题进阶版
BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上 ...
- BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)
BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...
- CodeForces 455C Civilization(并查集+树直径)
好久没有写过图论的东西了,居然双向边要开两倍空间都忘了,不过数组越界cf居然给我报MLE??这个题题意特别纠结,一开始一直不懂添加的边长是多长... 题意:给你一些点,然后给一些边,注意没有重边 环, ...
随机推荐
- LeetCode_Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- NSIS检测操作系统x64还是x86的问题。
想共同维护一个NSIS脚本文件的,不想搞两个版本的脚本文件了.开始想到了!if语句,没试过,不知道行不行得通.后来google了一下.可以用两个头文件搞定.参照下面链接 Reference: http ...
- /sbin/ifup: configuration for eth0 not found解决
/sbin/ifup: configuration for eth0 not found. Usage: ifup <device name> 那么应该是在/etc/sysconfig/n ...
- MVC4.0 Controller和View重复加载
项目完成以后总是感觉有一些页面跑起来特别的慢,就仔细的调试了下,发现有很多也买年都是走了两遍,页面加载的时候Controller和View会连续走了两次,没有一点缘由 查了很久也不知道什么原因,这个问 ...
- NOI2013 树的计数
题目:http://uoj.ac/problem/122 85%做法: 动态规划. 首先重编号,BFS序变成1...n,然后DFS序相应重编号. 记pos[i]为i号点在DFS中的位置,即pos[d[ ...
- J2EE学习路线
第一部分: JAVA语言基础知识.包括异常.IO流.多线程.集合类.数据库.(切记基础知识一定要时时刻刻巩固,注意,如果你是想以最快速度学习J2EE,关于Java中的Swing知识点,就只做了解) ...
- 第30讲 UI组件之 GridView组件
第30讲 UI组件之 GridView组件 1.网格布局组件GridView GridView是一个ViewGroup(布局控件),可使用表格的方式显示组件,可滚动的控件.一般用于显示多张图片,比如实 ...
- ASIHttpRequest:创建队列、下载请求、断点续传、解压缩
ps:本文转载自网络:http://ryan.easymorse.com/?p=12 感谢作者 工程完整代码下载地址:RequestTestDownload1 可完成: 下载指定链接的zip压缩文件 ...
- 程序员的家!我终于拥有自己的blog了!!!
经过多次提交诚恳的家园申请,终于得到了审核通过!今天就开始了我的.net成长之路!!!
- (转)C#之玩转反射
前言 之所以要写这篇关于C#反射的随笔,起因有两个: 第一个是自己开发的网站需要用到 其次就是没看到这方面比较好的文章. 所以下定决心自己写一篇,废话不多说开始进入正题. 前期准备 在VS20 ...