LOJ121 【离线可过】动态图连通性
题目链接:戳我
【线段树分治版本代码】
这里面的线段树是时间线段树,每一个节点都要开一个vector,记录当前时间区间中存在的边的标号qwq
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<stack>
#include<vector>
#define MAXN 1000010
using namespace std;
int n,m;
int fa[MAXN],siz[MAXN],tim[5010][5010];
struct Node{int x,y;};
struct Que{int op,x,y;}q[MAXN];
struct Seg{
int l,r;
vector<int>v;
}t[MAXN<<2];
stack<Node>s;
//map<pair<int,int>,int>tim;
inline int ls(int x) {return x<<1;}
inline int rs(int x) {return x<<1|1;}
inline int find(int x){return fa[x]==x?x:find(fa[x]);}
inline void build(int x,int l,int r)
{
t[x].l=l,t[x].r=r;
if(l==r) return;
int mid=(l+r)>>1;
build(ls(x),l,mid);
build(rs(x),mid+1,r);
}
inline void merge(int x,int y)
{
x=find(x),y=find(y);
if(x==y) return;
if(siz[x]>siz[y]) swap(x,y);
fa[x]=y;
s.push((Node){x,y});
siz[y]+=siz[x];
}
inline void del(int x)
{
while((int)s.size()>x)
{
Node cur=s.top(); s.pop();
siz[cur.y]-=siz[fa[cur.x]=cur.x];
}
}
inline void insert(int x,int ll,int rr,int k)
{
int l=t[x].l,r=t[x].r;
if(ll<=l&&r<=rr)
{
t[x].v.push_back(k);
return;
}
int mid=(l+r)>>1;
if(ll<=mid) insert(ls(x),ll,rr,k);
if(mid<rr) insert(rs(x),ll,rr,k);
}
inline void solve(int x)
{
int cur=s.size();
for(int i=0,len=t[x].v.size();i<len;i++)
merge(q[t[x].v[i]].x,q[t[x].v[i]].y);
if(t[x].l==t[x].r)
{
if(q[t[x].l].op==2)
{
if(find(q[t[x].l].x)==find(q[t[x].l].y))
printf("Y\n");
else printf("N\n");
}
}
else solve(ls(x)),solve(rs(x));
del(cur);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
//freopen("ce.out","w",stdout);
#endif
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1;
build(1,1,m);
for(int i=1;i<=m;i++)
{
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
if(x>y) swap(x,y);
q[i]=(Que){op,x,y};
if(op==1)
{
insert(1,tim[x][y],i,i);
tim[x][y]=0;
}
else if(op==0) tim[x][y]=i;
}
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
if(tim[i][j])
insert(1,tim[i][j],m,tim[i][j]);
solve(1);
return 0;
}
请不要用map!!!会T死的!!!
【LCT版本代码】(咕咕咕)
强制在线的还不会写。。暂且也咕着吧qwqwq
LOJ121 【离线可过】动态图连通性的更多相关文章
- LOJ.121.[离线可过]动态图连通性(线段树分治 按秩合并)
题目链接 以时间为下标建线段树.线段树每个节点开个vector. 对每条边在其出现时间内加入线段树,即,把这条边按时间放在线段树的对应区间上,会影响\(O(\log n)\)个节点. 询问就放在线段树 ...
- 【LOJ121】「离线可过」动态图连通性
[LOJ121]「离线可过」动态图连通性 题面 LOJ 题解 线段树分治的经典应用 可以发现每个边出现的时间是一个区间 而我们每个询问是一个点 所以我们将所有边的区间打到一颗线段树上面去 询问每个叶子 ...
- LOJ121 「离线可过」动态图连通性
思路 动态图连通性的板子,可惜我不会在线算法 离线可以使用线段树分治,每个边按照存在的时间插入线段树的对应节点中,最后再dfs一下求出解即可,注意并查集按秩合并可以支持撤销操作 由于大量使用STL跑的 ...
- [LOJ#121]动态图连通性
[LOJ#121]动态图连通性 试题描述 这是一道模板题. 你要维护一张无向简单图.你被要求加入删除一条边及查询两个点是否连通. 0:加入一条边.保证它不存在. 1:删除一条边.保证它存在. 2:查询 ...
- LOJ#121. 「离线可过」动态图连通性(线段树分治)
题意 板子题,题意很清楚吧.. Sol 很显然可以直接上LCT.. 但是这题允许离线,于是就有了一个非常巧妙的离线的做法,好像叫什么线段树分治?? 此题中每条边出现的位置都可以看做是一段区间. 我们用 ...
- LOJ 121 「离线可过」动态图连通性——LCT维护删除时间最大生成树 / 线段树分治
题目:https://loj.ac/problem/121 离线,LCT维护删除时间最大生成树即可.注意没有被删的边的删除时间是 m+1 . 回收删掉的边的节点的话,空间就可以只开 n*2 了. #i ...
- LOJ #121. 「离线可过」动态图连通性 LCT维护最大生成树
这个还是比较好理解的. 你考虑如果所有边构成一棵树的话直接用 LCT 模拟一波操作就行. 但是可能会出现环,于是我们就将插入/删除操作按照时间排序,然后依次进行. 那么,我们就要对我们维护的生成树改变 ...
- LOJ121 动态图连通性(LCT)
用LCT维护一下删除时间的最大生成树即可.当然也可以线段树分治. #include<iostream> #include<cstdio> #include<cmath&g ...
- 【LOJ】#121. 「离线可过」动态图连通性
题解 和BZOJ4025挺像的 就是维护边权是时间的最大生成树 删边直接删 两点未联通时直接相连,两点联通则找两点间边权小的一条边删除即可 代码 #include <bits/stdc++.h& ...
随机推荐
- python中tornado的第一个例子
1 先安装tornado pip install tornado 2 新建tor.py 记住不能建立 tornado.py 这样的名字 不然会报错 ImportError: No module n ...
- Spring配置项<context:annotation-config/>解释说明
转自:https://blog.csdn.net/techbirds_bao/article/details/9241371 在基于主机方式配置Spring的配置文件中,你可能会见到<conte ...
- TMS Grid
TMS Grid http://edn.embarcadero.com/article/42553
- Installing Eclipse Plug-ins from an Update Site with a self-signed certificate
If you try and connect to a p2 repository on a server with a self-signed cert, you will more than li ...
- D3D-GetBackBuffer &GetFrontBufferData 抓屏&D3D抓取GPU数据
HRESULT GetBackBuffer( [in] UINT iSwapChain, [in] UINT ...
- Git----分支管理01
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没有啥影响,不过,在某个时间点,两个平行宇宙合 ...
- Maven(八) Maven项目和testng结合应用
要想使maven结合testng只需要在pom.xml文件中加入如下信息: <build> <plugins> <!-- invoke testng.xm ...
- C# 与 Java Rsa加密与解密互通
Rsa 加密标准的制定已经过去了十多年了. 这两天在看rsa 加密的文章,基本上都是在说 .net 与 java 之间的 rsa加密是不能互通的.因为项目有用到,所以花了点时间对rsa加密做了一点点了 ...
- Golang之方法(自定义类型,struct)
方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...
- string.match(RegExp) 与 RegExp.exec(string) 深入详解
string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...