BZOJ 4668: 冷战
Description
在一个图上,在两个点间连一条边,问这两个点最早在什么时候联通.
Sol
并查集+启发式合并.
按秩合并的并查集...我也不知道什么是按秩合并,反正就跟启发式合并差不多,合并的时候将小的往大的里和,因为每次增长都是小集合倍数的两倍以上,所以层数不超过 \(log n\)
然后连边的时候记录一下是第几次连接的,统计一下深度,最后暴力找LCA...
Code
/**************************************************************
Problem: 4668
User: BeiYu
Language: C++
Result: Accepted
Time:1256 ms
Memory:9104 kb
****************************************************************/ #include <bits/stdc++.h>
using namespace std; const int N = 5e5+50; int n,lst;
struct UnionTable {
int f[N],s[N],v[N],d[N];
void init(int n) {
for(int i=1;i<=n;i++) f[i]=i,v[i]=0,s[i]=1;
}
int find(int x) {
if(f[x]^x) {
int fa=find(f[x]);
d[x]=d[f[x]]+1;
return fa;
}else return x;
}
void Union(int x,int y,int c) {
int f1=find(x),f2=find(y);
if(f1==f2) return;
if(s[f1]>s[f2]) f[f2]=f1,v[f2]=c,s[f1]+=s[f2];
else f[f1]=f2,v[f1]=c,s[f2]+=s[f1];
}
int Query(int x,int y) {
int f1=find(x),f2=find(y),r=0;
if(f1!=f2) return 0;
for(;x^y;) {
if(d[x]<d[y]) swap(x,y);
r=max(r,v[x]),x=f[x];
}return r;
}
}un; inline int in(int x=0,char ch=getchar()) { while(ch>'9' || ch<'0') ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x; }
int main() {
n=in();
un.init(n);
for(int m=in(),c=0;m--;) {
int opt=in(),u=in()^lst,v=in()^lst;
if(!opt) un.Union(u,v,++c);
else printf("%d\n",lst=un.Query(u,v));
}return 0;
}
BZOJ 4668: 冷战的更多相关文章
- [BZOJ 4668]冷战(带边权并查集+启发式合并)
[BZOJ 4668]冷战(并查集+启发式合并) 题面 一开始有n个点,动态加边,同时查询u,v最早什么时候联通.强制在线 分析 用并查集维护连通性,每个点x还要另外记录tim[x],表示x什么时间与 ...
- 【BZOJ 4668 冷战】
题目: [BZOJ 4668 冷战] 思路: 因为考虑强制在线,我们是肯定要维护形状的 我们发现如果\((u,v)\)这条边如果\(u,v\)已经连上,那么对于最终答案这条边是没有贡献的 所以我们发现 ...
- BZOJ 4668 冷战(按秩合并并查集+LCA)
4668: 冷战 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 627 Solved: 303[Submit][Status][Discuss] D ...
- bzoj 4668 冷战——并查集结构
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 不路径压缩,维护并查集的树的结构,查询链上最大值.按秩合并就可以暴爬. #includ ...
- bzoj 4668 冷战 —— 并查集按秩合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4668 按秩合并维护并查集的树结构,然后暴力找路径上的最大边权即可. 代码如下: #inclu ...
- BZOJ 4668: 冷战 并查集&&暴力LCA(雾)
利用并查集按秩合并,保存每个点合并的时间: 求时间时,就一直跳u=fa[u],并记录路径上时间的最大值,代表最后一次合并的时间 #include<cstdio> #include<i ...
- BZOJ 4668: 冷战 并查集启发式合并/LCT
挺好想的,最简单的方法是并查集启发式合并,加暴力跳父亲. 然而,这个代码量比较小,比较好写,所以我写了 LCT,更具挑战性. #include <cstdio> #include < ...
- 并查集+启发式合并+LCA思想 || 冷战 || BZOJ 4668
题面:bzoj炸了,以后再补发 题解: 并查集,然后对于每个点记录它与父亲节点联通的时刻 tim ,答案显然是 u 到 v 的路径上最大的 tim 值.启发式合并,把 size 小的子树往大的上并,可 ...
- BZOJ 4668 LCT
思路: 这不是LCT裸题嘛23333 (好像并查集+按秩合并就可以搞了 我还是too young) 维护边权的话 就新加一个点 代表边 这个点想线段的两个端点连边就好了 //By SiriusRen ...
随机推荐
- [LeetCode] Happy Number 快乐数
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...
- Hibernate 缓存机制浅析
1. 为什么要用 Hibernate 缓存? Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源 ...
- Webwork 学习之路【08】结合实战简析Controller 配置
虽然现在 MVC 框架层出不穷,但做为 Struts 前身的 webwork. 其经典程度不亚于贝利之于足球,双 11 之于淘宝特卖. 本篇将结合 webwork controller 配置文件 xw ...
- MobaXterm.9.4|ssh连接工具
在狂博客中,无意发现的一款集成的远程连接工具MobaXterm.9.4,官方有个人免费版,和企业版!有连接数限制,此款为破解版.感觉还挺不错的,ssh远程连接工具! 01.主界面 02.可选的远程 ...
- List [][]
# -*- coding:utf-8 -*- L = [ ['Apple', 'Google', 'Microsoft'], ['Java', 'Python', 'Ruby', ...
- 使用haproxy的ACL封禁IP
http://www.360doc.com/content/11/1226/13/834950_175075893.shtml 该方法,用户访问得到的是403页面 或者尝试用http-request拒 ...
- mysql general log日志
注:应一直出现http://www.cnblogs.com/hwaggLee/p/6030765.html文章中的问题 故mysql general log日志.查看具体是什么命令导致的. 打开 ge ...
- 实用篇!Asp.Net数据传输压缩
一.业务场景 公司关键业务模块之一考试系统试卷内容加载缓慢.加载失败,前方人员哀声四起,客户投诉,各种爆炸! 二.问题分析 1.试卷存储采用文本文件方式存储 引发问题:并发情况下IO频繁,造成过多的线 ...
- java学习笔记之线程1
1.线程的概念 线程是系统中最小的执行单元,同一进程有多个线程,多个线程共享进程的资源. 线程调用yield()方法使线程从运行状态转入可运行状态,让出资源: 线程调用sleep()方法使线程由运行状 ...
- linux安装adb
本文只针对centOS6.8,其他版本未测试 1.下载adb包 下载android sdk for linux(http://tools.android-studio.org/index.php/sd ...