天哪这道题竟然只有一篇题解!


emm,首先读题看完两个操作就已经有很明确的思路了,显然是并查集+树的直径 一波解决。

并查集不多说了,如果不了解的可以看这里.

树的直径的思路很朴实,就是两边DFS(BFS也OK)。具体先随便找一个节点,然后搜一遍,找到最远的,然后再搜一遍,这样合在一起就一定是最长的了。

不过呢这道题还是注意一下求直径的公式,具体如下:

$D_new=max(D_u,D_v,[D_u/2]+[D_v/2]+1)$

那个方括号指的是取整(没找到在哪里打出来)。

en除此之外好像没什么好说的。。。

AC代码如下:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std; const int maxn=; int n,m,q,max_i,max_v;
int f[maxn],len[maxn],sz[maxn];
bool used[maxn];
vector<int>g[maxn]; void dfs(int val,int depth,int pos){
if(depth>max_i){
max_i=depth;
max_v=val;
}
for(int i=;i<g[val].size();i++){
if(g[val][i]!=pos)dfs(g[val][i],depth+,val);
}
} int calc(int val){
max_i=-;
dfs(val,,-);
max_i=-;
dfs(max_v,,-);
return max_i;
} int find(int x){
if(x==f[x])return x;
return f[x]=find(f[x]);
} void merge(int x,int y){
x=find(x),y=find(y);
if(sz[x]>sz[y])swap(x,y);
sz[y]+=sz[x];
f[x]=y;
} int radius(int x){
return (len[x]+)/;
} void merge2(int x,int y){
x=find(x),y=find(y);
if(x==y)return;
if(sz[x]>sz[y])swap(x,y);
sz[y]+=sz[x];
f[x]=y;
len[y]=max(max(radius(x)+radius(y)+,len[x]),len[y]);
} int main() {
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++){
f[i]=i;
sz[i]=i;
len[i]=;
}
for(int i=;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
merge(x,y);
}
for(int i=;i<=n;i++){
int p=find(i);
if(!used[p]){
used[p]=;
len[p]=calc(i);
}
}
while(q--){
int t,x,y;
scanf("%d",&t);
if(t==){
scanf("%d",&x);
printf("%d\n",len[find(x)]);
}else{
scanf("%d%d",&x,&y);
merge2(x,y);
}
}
}

题解 P2195 【HXY造公园】的更多相关文章

  1. 洛谷 P2195 HXY造公园

    P2195 HXY造公园 题目描述 现在有一个现成的公园,有n个休息点和m条双向边连接两个休息点.众所周知,HXY是一个SXBK的强迫症患者,所以她打算施展魔法来改造公园并即时了解改造情况.她可以进行 ...

  2. 洛谷 P2195 HXY造公园 解题报告

    P2195 HXY造公园 题目描述 现在有一个现成的公园,有\(n\)个休息点和\(m\)条双向边连接两个休息点.众所周知,\(HXY\)是一个\(SXBK\)的强迫症患者,所以她打算施展魔法来改造公 ...

  3. 【luogu P2195 HXY造公园】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...

  4. CF455C Civilization | luogu HXY造公园

    题目链接: https://www.luogu.org/problemnew/show/P2195 http://codeforces.com/contest/455/problem/C 显然我们可以 ...

  5. 【题解】NOIP2017逛公园(DP)

    [题解]NOIP2017逛公园(DP) 第一次交挂了27分...我是不是必将惨败了... 考虑这样一种做法,设\(d_i\)表示从该节点到n​节点的最短路径,\(dp(i,k)\)表示从\(i\)节点 ...

  6. NOIP前刷题记录

    因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...

  7. NOIP刷题

    搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:h ...

  8. 【图论 动态规划拆点】luoguP3953 逛公园

    经典的动态规划拆点问题. 题目描述 策策同学特别喜欢逛公园.公园可以看成一张 NN 个点 MM 条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口, NN 号点是公园的出口,每条边有一个非负 ...

  9. poj1083 贪心

    K - 简单dp Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:10000KB     64bit ...

随机推荐

  1. label标签的可访问性问题

    label标签可以优雅地扩大表单控件元素的点击区域.例如,单纯的单选框点击区域就鼻屎那么大的地方,经常会点不到位置.因此,label标签的使用对于提高页面的可用性可访问性是很有帮助的. 其实,它的样子 ...

  2. 你不知道的JavaScript(六)Box&Unbox

    很多语言中都有Box和Unbox的概念,很多书籍把Box翻译为"装箱操作",指的是將基本数据类型包装成对象:Unbox和它相反,把对象类型转换为基本类型. 我们知道JavaScri ...

  3. Codeforces 845A. Chess Tourney 思路:简单逻辑题

    题目: 题意:输入一个整数n,接着输入2*n个数字,代表2*n个选手的实力.    实力值大的选手可以赢实力值小的选手,实力值相同则都有可能赢.    叫你把这2*n个选手分成2个有n个选手的队伍. ...

  4. HDU 1587 Flowers【贪心】

    题意:给出n种花的价钱,和总的金额m,问最多能够买到多少朵花.先排序,然后就是便宜的花在能够买的范围内能够多买就多买 #include<iostream> #include<cstd ...

  5. 找出 alter system kill session ‘sid,serial#’ kill 掉的数据库会话对应进程

    当我们使用alter system kill session ‘sid,serial#’ 在数据库中kill掉某个会话的时候,如果你观察仔细会发现v$session.paddr发生了改变,从而是的不能 ...

  6. ftp 一个账号多个家目录的解决方案

    通常,配置ftp时,一个ftp账号只对应一个家目录,不能有多个家目录的情况. 但是,根据公司开发项目的需求,需要做到一个ftp对应多个开发目录.有想过创建软链接的,可是发现通过ftp是访问不了的. 举 ...

  7. 复制excel表,往excel表中写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...

  8. 垃圾回收器(GC)

    值类型占用的空间在方法执行结束后会被马上释放, 引用类型占用的空间在方法结束后不会被马上释放,具体什么时间释放由垃圾回收器(GC)来决定. GC(Garbage Collection):JAVA/.N ...

  9. xampp、phpstudy安装phalcon

    1.下载扩展 https://github.com/phalcon/cphalcon/releases/tag/v3.4.1选择PHP对应版本的phalcon扩展 2.PHP.ini 配置phalco ...

  10. redis.conf配置文件配置项解析

    知识来源于 : https://blog.csdn.net/bsfz_2018/article/details/79061413[Redis在linux下的安装] daemonize:如需要在后台运行 ...