题目描述

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

1、对某个休息点x,查询公园中可以与个点互相到达的休息点组成的路径中的最长路径

2、对于两个休息点x、y,如果x,y已经可以互相到达则忽略此次操作。否则,在x可到达的所有休息点和y可到达的所有休息点(包括x,y自身)分别选择一个休息点,然后在这两个休息点之间连一条边,并且这个选择应该满足对于连接后的公园,x和y所在的区域(即x,y可达到的所有休息点和边组成的集合)中的最长路径的长度最小。

HXY打算进行q个操作,请你回答她的对于公园情况的询问(操作1)或者执行她的操作(操作2)。

注:所有边的长度皆为1。保证不存在环。最长路径定义为:对于点v1,v2......vk,如果对于其中任意的vi和vi+1(1<=i<=k-1),都有边相连接,那么vj(1<=j<=k)所在区域的最长路径就是k-1。

输入格式

第一行,三个正整数,分别为n,m,q。

接下来的m行,每一行有两个正整数xi,yi,表示xi和yi有一条双向边相连。

再接下来的q行,每一行表示一个操作。

若该行第一个数为1,则表示操作1,之后还有一个正整数xi,表示要查询的休息点。

若该行第一个数为2,则表示操作2,之后还有两个正整数xi,yi,表示需要执行操作的两个休息点。

输出格式

输出行数为操作1的个数。

每行输出对于操作1询问的回答。

数据范围:

对于10%的数据,只存在操作1。

对于30%的数据,1<=m<n<=20,1<=q<=5。

对于60%的数据,1<=m<n<=2000,1<=q<=1000。

对于100%的数据,1<=m<n<=3*10^5,1<=q<=3*10^5。

思路

由若干树组成的森林,对于操作1,求出若干树的直径就好了;对于操作2,用并查集维护连通性,如果在一棵树上,跳过;如果不在,为了让新形成的直径最短,于是我们把两棵树的直径的中间点连一起,这样来保证新形成的直径最短。

注意,求树的直径要用dp,两边dfs会超时。

Code

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
inline int read(){int w=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}return w*f;
}
int n,m,q,f[300005],r[300005],d[300005],maxx,p;
bool vis[300005];
vector<int> g[300005];
int get(int x){if(f[x]==x) return x;else return f[x]=get(f[x]);
}
void merge(int x,int y){f[x]=y;
}
void dp(int x,int fa){for(int i=0;i<g[x].size();i++){int v=g[x][i];if(v==fa) continue;dp(v,x);maxx=max(maxx,d[x]+d[v]+1);d[x]=max(d[x],d[v]+1);}
}
int main(){n=read(),m=read(),q=read();for(int i=1;i<=n;i++) f[i]=i;for(int i=1;i<=m;i++){int u=read(),v=read();merge(get(u),get(v));g[u].push_back(v);g[v].push_back(u);}for(int i=1;i<=n;i++){int x=get(i);if(!vis[x]){maxx=0;vis[x]=1;dp(x,0);r[x]=maxx;}}for(int i=1;i<=q;i++){int opt=read(),x=read();if(opt==1){x=get(x);printf("%d\n",r[x]);continue;}int y=read();x=get(x),y=get(y);if(x==y) continue;int nowdata=(r[x]+1)/2+(r[y]+1)/2+1;nowdata=max(nowdata,max(r[x],r[y]));merge(x,y);r[y]=nowdata;}return 0;
}

P2195 HXY造公园相关推荐

  1. 简单理解Java中的面向对象

    java基础之面向对象 面向对象是什么 打个比方,你找对象的时候,是不是应该找人类?更具体点,你是在找茫茫人海中的一个个体,每个人都是不同的.在Java中,同一个类也是有不同的对象的,但都有相同的.基 ...

  2. 造车失败后投身机器人和AI,我笑戴森太疯癫,戴森笑我看不穿

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 提起戴森,读者们脑海里冒出来的,一定是吹风机.卷发棒.吸尘器等网红爆款家电. 这些极具未来感和时尚感的产品,有着远超于该类别平均水平的高价位,堪称是 ...

  3. “德阳造”水上智能清污机器人 一次可收集500公斤垃圾

    "德阳造"水上智能清污机器人在工作中.周鸿摄 □王姗姗本报记者雷倢 12月19日上午,在德阳旌湖下游柳梢堰附近,一只巨型的"金鱼"正慢悠悠地游来游去,附近的水草 ...

  4. 迪士尼机器人芭蕾舞_迪士尼公园只有卡通公主?内含大量惊人科技感机器人

    提到迪士尼,人们大概会想到人满为患的主题公园或各具美色的卡通公主...然而真相却是,Disney这几年还造了不少科技感满满的机器人!有的还挺萌!一起来瞅瞅: 01.像素机器人战队 2014年,迪士尼的 ...

  5. 迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

    全世界只有3.14 % 的人关注了 爆炸吧知识 来源:普象工业设计小站 天呐!最新消息 阿布扎比酋长国 又发现220亿桶非常规可采石油 让原本富有的国家更加钱上有钱 尤其是它的兄弟国--迪拜 简直&q ...

  6. 新造车,程序员的糖,工程师的泪

    来源|极客公园 文|郑玥 造车抢人大战开出「无上限」年薪,真正造车专业人才为什么没人要? 一边是各家新造车「无上限」高薪抢「算法」人,一边是车辆机械专业的求职者找不到工作. 人才市场的巨变,反应着似乎 ...

  7. 方特主题公园体验科幻神奇

    若是带小朋友,去主题公园在何时不过.方特欢乐世界以游乐为主,梦幻王国以体验为主,当然家长们如果想偷偷懒不排各种娱乐项目的长队的话,选择梦幻王国的各种4D体验也不错. 方特欢乐世界.方特梦幻王国主题公园 ...

  8. 前摩拜创始人出任百度造车CEO

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 本文转自雷锋网 夏一平:百度经过多年技术积累,现在是时候真正开花结果了. " 百度智能汽车公司,迎来首位CEO. 2月22 ...

  9. 百度「造」什么车、微信读书「硬」变现、苹果手表「预测」新冠|极客一周...

    百度宣布和吉利合作成立智能汽车公司:微信读书将推硬件电子书阅读器:Apple Watch 或可提前数日检查出新冠感染. 百度也要造车了Waymo 没干的事儿,让百度干了. 1 月 11 日本周一,「腼 ...

最新文章

  1. WWF(Windows Workflow Foundation)开发环境的建立。 .NET 技术前瞻,WWF,Windows,Workflow,Foundation...
  2. 异步接口同步返回_Dubbo客户端异步接口的实现背景和实践
  3. 值得尝试的 3 个 Linux 终端
  4. NYOJ15-括号匹配(二)-区间DP
  5. figma设计_如何在Figma中构建设计入门套件(第1部分)
  6. 云计算及应用课程知识整理
  7. 主板螺丝是机箱配还是主板配_要配新电脑,A520主板和B450主板哪一个更加值得购买?...
  8. 一个很好的自学网站~推荐一下
  9. led显示屏控制卡接线图解_Led显示屏出现花屏是什么原因
  10. matlab打开笔记本摄像头_matlab窗口调用摄像头
  11. 删除链表中指定节点,要求时间复杂度为O(1)
  12. 作者:胡晓惠(1960-),男,中国科学院软件研究所研究员,天基综合信息技术实验室常务副主任...
  13. 关于OPENGL与OPENGL ES的区别
  14. 如鹏网学习笔记(十二)HTML5
  15. Allegro视频教程
  16. 蓝桥杯省赛2020 成绩统计
  17. Win10上安装ue4后无法运行问题的解决方法
  18. 魅蓝手机ROOT权限获取
  19. 论文阅读|目标检测之CE-FPN,将通道增强运用到上采样,减少信息丢失,同时添加了通道注意力机制
  20. windows xp iis5.1服务器安装

热门文章

  1. 公司寄件管理数据分析教程
  2. ---------------------------谨以此文献给我的2011-----------------------------------
  3. Java 原生 Base64 编解码、Md5、SHA-1、SHA-256 加密摘要算法
  4. 两次一轮游的一点感想
  5. mysql sql语句 引号_关于sql:何时在MySQL中使用单引号,双引号和反引号
  6. 在Java中DES加密/解密的实现[工具类]
  7. 服务器接收GPS信息,GPS授时服务器的技术参数介绍
  8. 2011湖南互联网站长大会开始接受报名
  9. 全球QUANT专属证书CQF
  10. utils.general详解1