思路:考试的时候打了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相关推荐

  1. FJ省队集训DAY3 T1

    思路:我们考虑如果取掉一个部分,那么能影响到最优解的只有离它最近的那两个部分. 因此我们考虑堆维护最小的部分,离散化离散掉区间,然后用线段树维护区间有没有雪,最后用平衡树在线段的左右端点上面维护最小的 ...

  2. FJ省队集训DAY4 T1

    直接上题解 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstr ...

  3. NOI2018湖北省队集训Day4 T1 djq和MZ

    题面: 得分情况: 40分,写了纯暴力. 正解: 其实O(nn−−√logn)O(nnlog⁡n)O(n\sqrt{n}\log{n})的做法还挺好想的(然而我在考场上并没有想出来),分块莫队再用线段 ...

  4. FJ省队集训DAY2 T2

    思路:我们可以考虑三角剖分,这样问题就变成考虑三角形的选取概率和三角形内有多少个点了. 先用树状数组预处理出三角剖分的三角形中有多少个点,然后用线段树维护,先用原点极角排序,然后枚举i,再以i极角排序 ...

  5. 2017FJ省队集训 游记

    2017FJ省队集训 游记 又是一篇流水账 Day 1 今天是省队集训的第一天.早上骑车去八中,到的时候汗流太多浑身湿透被杨哥哥和runzhe2000 d了,一个说我去游泳了一个说我打球了...流完汗 ...

  6. [2018HN省队集训D8T1] 杀毒软件

    [2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...

  7. #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)

    #6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树,以及一个排列ppp,path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集 ...

  8. LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告

    LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告 好苹果会组成连通块,整棵树的权值为 ∑ i = 1 n c i [ c i ≥ 0 ] [ s i z n u m ( c i ...

  9. 雅礼NOIP2018集训 day5

    雅礼NOIP2018集训 day5 联 题面 由于出题人懒所以没有背景. 一个无限长的 01 序列,初始全为 0,每次选择一个区间 [l,r] 进行操作,有三种操作: • 1 l r 将 [l,r] ...

最新文章

  1. Flask的HelloWorld程序
  2. 关于植物和共生微生物,这116张PPT讲明白了(值得收藏!)
  3. 怎么修复手机服务器,新手机怎么恢复旧手机上的所有数据?
  4. python append 浮点数 精度_Python打牢基础,从12个语法开始!
  5. Java二手车交易系统
  6. NLP面试时,项目经历要怎么讲?
  7. 存储mysql数据存在特殊字符时处理_SQL数据库对于保存特殊字符的解决办法
  8. 为什么我们需要Q#?
  9. Ranger-AdminServer安装(开启Kerberos)
  10. Android开发周报:Google 推出AR SDK、Android 8.0 Oreo 最终版发布
  11. [bzoj 2017] [Usaco2009 Nov]硬币游戏
  12. C# Lodop实现打印
  13. HDFS 上传文件的不平衡,Balancer问题是过慢
  14. Protobuf, understand the hood
  15. 《视觉SLAM十四讲》学习笔记
  16. 两个华为路由器实现MESH组网,WIFI信号无缝漫游
  17. 如何高效学习和阅读源码?
  18. UnicodeDecodeError: ‘gb2312‘ codec can‘t decode byte 0xe9 in position 5632: illegal multibyte sequen
  19. css怎么做响应式布局,用CSS实现响应式布局
  20. SPRD Camera sensor

热门文章

  1. jQuery弹出窗口浏览图片
  2. 090621 NTFS删除的恢复
  3. c语言一输入运算就显示错误,大咖都会犯的18个c语言入门错误
  4. python中string.digits_python学习笔记五:字符串方法
  5. Xamarin Essentials教程数据传输DataTransfer
  6. Xamarin提示Build-tools版本过老
  7. java ssh文件下载_Java使用SSH从远程服务器下载文件
  8. ubuntu eclipse mysql_Ubuntu设置、应用及常见问题解决(十)- 安装jdk+tomcat+eclipse+mysql...
  9. 随机邻域嵌入_「论文阅读」-学习用于通勤流嵌入的地理上下文嵌入
  10. vba 当前文件名_值得收藏的VBA编程常用代码3640