3237: [Ahoi2013]连通图

Time Limit: 20 Sec   Memory Limit: 512 MB

Submit: 106  
Solved: 31

[
Submit][
Status]

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

Source

 

弱B。。的弱B题解。。。

首先我们知道,可以把提问中没问的边缩成点。

但是不影响复杂度。。。

所以我们,把它拆成2半。。

前一半缩点(不考虑后一半的询问),乱搞,后一半的不用考虑前一半的询问,乱搞。。。

于是f(q)=f(q/2)+O(qc*a(qc)) O(f(q))=O(qlogqc*α(qc))

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEMr(a,n,w) Rep(i,n) a[i]=w;
#define MEMF(a,n,w) For(i,n) a[i]=w;
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (100000+10)
#define MAXM (200000+10)
#define MAXQ (100000+10)
#define MAXC (4)
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int n,m,q;
struct comm
{
int n,a[4];
}ask[MAXQ],back[MAXQ*30],*back_tail=back;
struct E
{
int x,y;
}e[MAXM*30],*e_tail=e;
struct unionset
{
int father[MAXN];
void init(int n){For(i,n) father[i]=i;}
int getfather(int x)
{
if (father[x]==x) return x;
return father[x]=getfather(father[x]);
}
bool union2(int x,int y)
{
if (getfather(x)==getfather(y)) return 0;
father[father[x]]=father[y]; return 1;
}
}ufs; bool ans[MAXQ]={0};
int newV[MAXN],newE[MAXM];
void solve(int n,E *_e,int m,int l,int r)
{
e_tail+=m;
E *e=e_tail;
copy(_e,e_tail,e);
static bool b[MAXM]={0};MEMr(b,m,0);
if (l==r)
{
Rep(j,ask[l].n) b[ask[l].a[j]]=1;
ufs.init(n);
int tot=0;
Rep(i,m) if (!b[i]) tot+=ufs.union2(e[i].x,e[i].y);
if (tot==n-1) ans[l]=1;
e_tail-=m;
return;
}
Fork(i,l,r) Rep(j,ask[i].n) b[ask[i].a[j]]=1;
ufs.init(n);
Rep(i,m) if (!b[i]) ufs.union2(e[i].x,e[i].y);
//Con
int n2=0;
For(i,n) if (ufs.getfather(i)==i) newV[i]=++n2;
For(i,n) if (ufs.getfather(i)^i) newV[i]=newV[ufs.getfather(i)];
Rep(i,m) e[i].x=newV[e[i].x],e[i].y=newV[e[i].y];
//Red
int m2=0;
Rep(i,m) if (b[i]) newE[i]=m2++;
Rep(i,m) if (b[i]) e[newE[i]]=e[i];
Fork(i,l,r) Rep(j,ask[i].n) ask[i].a[j]=newE[ask[i].a[j]]; {
int m=l+r>>1,len=m-l+1;
comm *back_head=back_tail;
back_tail+=len;
copy(ask+l,ask+m+1,back_head);
solve(n2,e,m2,l,m);
copy(back_head,back_head+len,ask+l);
back_tail-=len;
solve(n2,e,m2,m+1,r);
}
e_tail-=m; }
int main()
{
// freopen("bzoj3237.in","r",stdin);
scanf("%d%d",&n,&m);
Rep(i,m) scanf("%d%d",&e[i].x,&e[i].y);
scanf("%d",&q);
Rep(i,q)
{
scanf("%d",&ask[i].n);
Rep(j,ask[i].n) scanf("%d",&ask[i].a[j]),ask[i].a[j]--;
}
solve(n,e,m,0,q-1);
Rep(i,q) if (ans[i]) puts("Connected");else puts("Disconnected");
return 0;
}

BZOJ 3237([Ahoi2013]连通图-cdq图重构-连通性缩点)的更多相关文章

  1. BZOJ 3237: [Ahoi2013]连通图

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1161  Solved: 399[Submit][Status ...

  2. 3237: [Ahoi2013]连通图 线段树分治

    题解: cf765f cf671e bzoj4184 bzoj4552 线段树分治裸题 还是介绍一下线段树分治 这个东西其实挺简单但也挺有用的 可以把删除+插入操作变成只有插入(倒着就是删除) 像这一 ...

  3. BZOJ 1018 线段树维护图的连通性问题

    思路: 我们可以搞一棵线段树 对于一段区间有6种情况需要讨论 左上右下.左上右上.左下右下.左下右上 这四种比较好维护 用左上右下举个例子吧 就是左儿子的左上右下&左区间到右区间下面有路&am ...

  4. [BZOJ3237][AHOI2013]连通图(分治并查集)

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1736  Solved: 655[Submit][Status ...

  5. 【bzoj3237】 Ahoi2013—连通图

    http://www.lydsy.com/JudgeOnline/problem.php?id=3237 (题目链接) 题意 给出一个无向图,$Q$组询问,每次询问将原图断掉$C$条边后是否还连通. ...

  6. Victoria的舞会2——图的连通性及连通分量

    [Vijos1022]]Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们, ...

  7. bzoj3569 DZY Loves Chinese II & bzoj3237 [AHOI2013] 连通图

    给一个无向连通图,多次询问,每次询问给 k 条边,问删除这 k 条边后图的连通性,对于 bzoj3237 可以离线,对于 bzoj3569 强制在线 $n,m,q \leq 500000,k \leq ...

  8. 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1

    import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { pro ...

  9. SVG的动态之美-搜狗地铁图重构散记

    搜狗地图发布了新版的移动端地铁图,改版初衷是为了用户交互体验的提升以及性能的改善.原版地铁图被用户吐槽最多的是pinch缩放不流畅.无过渡动画.拖拽边界不合理等等,大体上都是交互体验上的问题.实际上原 ...

随机推荐

  1. jquery easyui datagrid 获取Checked选择行(勾选行)数据

    原文:jquery easyui datagrid 获取Checked选择行(勾选行)数据 getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录. getSel ...

  2. USB Mass Storage协议分析

    目录 简介 指令数据和状态协议 CBW指令格式 CSWCommand Status Wrapper状态格式 SCSI命令集 Format Unit Inquiry MODE SELECT 简介 USB ...

  3. COB(Chip On Board)的製程簡單介紹

    前面提及 COB 的生產與 IC 的封裝製程幾乎是一致的,除了把 leadframe 改成了 PCB,把封膠由 molding 改成 dispensing,少了 triming & marki ...

  4. Qt-4.6动画Animation快速入门三字决

    Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟 ...

  5. 【JavaScript】Object.prototype.toString.call()进行类型判断

    权声明:本文为博主原创文章,未经博主允许不得转载. op = Object.prototype, ostring = op.toString, ... function isFunction(it)  ...

  6. POSIX和SYSTEM的消息队列应该注意的问题

    首先看看POSIX的代码: 1.posix_mq_server.c #include <mqueue.h>#include <sys/stat.h>#include <s ...

  7. [Leetcode][Python]49: Anagrams

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 49: Anagramshttps://leetcode.com/proble ...

  8. sharepoint 2010 使用自定义列表模版创建列表(1)

    我们在使用sharepoint的过程中,发现一个比较好用的功能,就是“将此列表另存为模版”(save list as template),这个功能的作用是,创建一个和当前列表或者文档库一模一样的配置, ...

  9. Power Strings(kmp妙解)

    Power Strings Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tota ...

  10. android 实现静默安装、卸载

    方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...