博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
阅读量:6306 次
发布时间:2019-06-22

本文共 1936 字,大约阅读时间需要 6 分钟。

Description

Input

Output

Sample Input

4 5
1 2
2 3
3 4
4 1
2 4
3
1 5
2 2 3
2 1 2

Sample Output

Connected
Disconnected
Connected

HINT

N<=100000 M<=200000 K<=100000

Solution

线段树分治,根据询问把每条边存在的时间区间拆成几个区间,然后覆盖到线段树上,最后$DFS$一遍线段树。用带撤销的并查集维护一下连通块个数,到线段树叶子节点的时候根据连通块个数输出答案。

常数有点大……离$TLE$只有$0.3s$……在被卡的边缘疯狂试探……

Code

1 #include
2 #include
3 #include
4 #define N (100009) 5 using namespace std; 6 7 int n,cnt,m,q,top,u[N<<1],v[N<<1]; 8 int fa[N],dep[N]; 9 pair
stack[N];10 vector
p[N<<1],Segt[N<<2];11 12 char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;13 #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)14 15 inline int read()16 {17 int x=0,w=1; char c=getchar();18 while (c<'0' || c>'9') {
if (c=='-') w=-1; c=getchar();}19 while (c>='0' && c<='9') x=x*10+c-'0', c=getchar();20 return x*w;21 }22 23 void Update(int now,int l,int r,int l1,int r1,int k)24 {25 if (l>r1 || r
>1;28 Update(now<<1,l,mid,l1,r1,k); Update(now<<1|1,mid+1,r,l1,r1,k);29 }30 31 int Find(int x)32 {33 return x==fa[x]?x:Find(fa[x]);34 }35 36 void DFS(int now,int l,int r)37 {38 int mid=(l+r)>>1,tmp=top;39 for (int i=0; i
dep[fy]) swap(fx,fy);45 fa[fx]=fy; dep[fy]+=(dep[fx]==dep[fy]); cnt--;46 stack[++top]=make_pair(fx,fy);47 }48 if (l
tmp; --i)51 {52 int fx=stack[i].first,fy=stack[i].second;53 fa[fx]=fx; dep[fy]-=(dep[fx]==dep[fy]); cnt++;54 }55 top=tmp;56 }57 58 int main()59 {60 n=cnt=read(); m=read();61 for (int i=1; i<=n; ++i) fa[i]=i, dep[i]=1;62 for (int i=1; i<=m; ++i) u[i]=read(), v[i]=read();63 q=read();64 for (int i=1; i<=q; ++i)65 {66 int c=read();67 for (int j=1; j<=c; ++j) p[read()].push_back(i);68 }69 for (int i=1; i<=m; ++i)70 {71 p[i].push_back(q+1);72 int last=1;73 for (int j=0; j

转载于:https://www.cnblogs.com/refun/p/10521591.html

你可能感兴趣的文章
多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】...
查看>>
自动生成四则运算题目
查看>>
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>
在GCE上安装Apache、tomcat等
查看>>
在Mac 系统下进行文件的显示和隐藏
查看>>
ue4(c++) 按钮中的文字居中的问题
查看>>
技能点
查看>>
读书笔记《乌合之众》
查看>>
Hadoop日记Day1---Hadoop介绍
查看>>
iOS 学习资料汇总
查看>>
centos7 yum安装jdk
查看>>
Bluedroid与BluZ,蓝牙测试方法的变动(基于bludroid和BlueZ的对比)
查看>>
接口和抽象类有什么区别
查看>>