FJ省队集训DAY5 T1
思路:考试的时候打了LCT,自以为能过,没想到只能过80..
考完一想:lct的做法点数是100W,就算是nlogn也会T。
讲一下lct的做法把:首先如果一条边连接的两个点都在同一个联通块内,那么这条边对答案没有影响,可以忽略,因此,问题变成了每次询问两个点中路径上权值最大的边(这里的权值我们令它为加入这条边的时间),边我们用一个点连接两个端点来表示。
正解:由于是无根树,因此我们用并查集按秩合并,每次把小的加到大的里面去,询问的时候暴力走lct查找最大即可。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 int fa[500005],n,m,size[500005],ty[500005],vis[500005],vistag; 7 int read(){ 8 int t=0,f=1;char ch=getchar(); 9 while (ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();} 10 while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();} 11 return t*f; 12 } 13 int find(int x){ 14 if (fa[x]==x) return x; 15 else return fa[x]=find(fa[x]); 16 } 17 int main(){ 18 n=read();m=read(); 19 for (int i=1;i<=n;i++) fa[i]=size[i]=1,ty[i]=0; 20 int Case=0,lastans=0; 21 for (int i=1;i<=m;i++){ 22 int opt=read(),u=read()^lastans,v=read()^lastans; 23 if (!opt){ 24 ++Case; 25 u=find(u),v=find(v); 26 if (u!=v){ 27 if (size[u]>size[v]) std::swap(u,v); 28 fa[u]=v; 29 size[v]+=size[u]; 30 ty[u]=Case; 31 }else{ 32 ++vistag; 33 int fu=u,fv=v; 34 for (;;u=fa[u]){ 35 vis[u]=vistag; 36 if (fa[u]==u) break; 37 } 38 int lca=0; 39 for (;;v=fa[v]){ 40 if (vis[v]==vistag&&!lca) lca=v; 41 if (fa[v]==v) break; 42 } 43 if (u!=v){ 44 printf("%d\n",lastans=0); 45 continue; 46 }else{ 47 int ans=0; 48 for (;fu!=lca;fu=fa[fu]) ans=std::max(ans,ty[fu]); 49 for (;fv!=lca;fv=fa[fv]) ans=std::max(ans,ty[fv]); 50 printf("%d\n",lastans=ans); 51 } 52 } 53 } 54 } 55 }
转载于:https://www.cnblogs.com/qzqzgfy/p/5654460.html
FJ省队集训DAY5 T1相关推荐
- FJ省队集训DAY3 T1
思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...
- FJ省队集训DAY4 T1
直接上题解 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstr ...
- NOI2018湖北省队集训Day4 T1 djq和MZ
题面: 得分情况: 40分,写了纯暴力. 正解: 其实O(nn−−√logn)O(nnlogn)O(n\sqrt{n}\log{n})的做法还挺好想的(然而我在考场上并没有想出来),分块莫队再用线段 ...
- FJ省队集训DAY2 T2
思路:我们可以考虑三角剖分,这样问题就变成考虑三角形的选取概率和三角形内有多少个点了. 先用树状数组预处理出三角剖分的三角形中有多少个点,然后用线段树维护,先用原点极角排序,然后枚举i,再以i极角排序 ...
- 2017FJ省队集训 游记
2017FJ省队集训 游记 又是一篇流水账 Day 1 今天是省队集训的第一天.早上骑车去八中,到的时候汗流太多浑身湿透被杨哥哥和runzhe2000 d了,一个说我去游泳了一个说我打球了...流完汗 ...
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...
- #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)
#6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树,以及一个排列ppp,path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集 ...
- LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告
LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告 好苹果会组成连通块,整棵树的权值为 ∑ i = 1 n c i [ c i ≥ 0 ] [ s i z n u m ( c i ...
- 雅礼NOIP2018集训 day5
雅礼NOIP2018集训 day5 联 题面 由于出题人懒所以没有背景. 一个无限长的 01 序列,初始全为 0,每次选择一个区间 [l,r] 进行操作,有三种操作: • 1 l r 将 [l,r] ...
最新文章
- Flask的HelloWorld程序
- 关于植物和共生微生物,这116张PPT讲明白了(值得收藏!)
- 怎么修复手机服务器,新手机怎么恢复旧手机上的所有数据?
- python append 浮点数 精度_Python打牢基础,从12个语法开始!
- Java二手车交易系统
- NLP面试时,项目经历要怎么讲?
- 存储mysql数据存在特殊字符时处理_SQL数据库对于保存特殊字符的解决办法
- 为什么我们需要Q#?
- Ranger-AdminServer安装(开启Kerberos)
- Android开发周报:Google 推出AR SDK、Android 8.0 Oreo 最终版发布
- [bzoj 2017] [Usaco2009 Nov]硬币游戏
- C# Lodop实现打印
- HDFS 上传文件的不平衡,Balancer问题是过慢
- Protobuf, understand the hood
- 《视觉SLAM十四讲》学习笔记
- 两个华为路由器实现MESH组网,WIFI信号无缝漫游
- 如何高效学习和阅读源码?
- UnicodeDecodeError: ‘gb2312‘ codec can‘t decode byte 0xe9 in position 5632: illegal multibyte sequen
- css怎么做响应式布局,用CSS实现响应式布局
- SPRD Camera sensor
热门文章
- jQuery弹出窗口浏览图片
- 090621 NTFS删除的恢复
- c语言一输入运算就显示错误,大咖都会犯的18个c语言入门错误
- python中string.digits_python学习笔记五:字符串方法
- Xamarin Essentials教程数据传输DataTransfer
- Xamarin提示Build-tools版本过老
- java ssh文件下载_Java使用SSH从远程服务器下载文件
- ubuntu eclipse mysql_Ubuntu设置、应用及常见问题解决(十)- 安装jdk+tomcat+eclipse+mysql...
- 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
- vba 当前文件名_值得收藏的VBA编程常用代码3640