zoukankan      html  css  js  c++  java
  • [BZOJ3569]DZY Loves Chinese II(随机化+线性基)

    3569: DZY Loves Chinese II

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 1515  Solved: 569
    [Submit][Status][Discuss]

    Description

    神校XJ之学霸兮,Dzy皇考曰JC。
    摄提贞于孟陬兮,惟庚寅Dzy以降。
    纷Dzy既有此内美兮,又重之以修能。
    遂降临于OI界,欲以神力而凌♂辱众生。
     
    今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边。
    时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭。
    而后俟其日A50题则又令其复原。(可视为立即复原)
    然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通。

    Input

    第一行N,M
    接下来M行x,y:表示M条膴蠁边,依次编号
    接下来一行Q
    接下来Q行:
    每行第一个数K而后K个编号c1~cK:表示K条边,编号为c1~cK
    为了体现在线,c1~cK均需异或之前回答为连通的个数

    Output

    对于每个询问输出:连通则为‘Connected’,不连通则为‘Disconnected’
    (不加引号)

    Sample Input

    5 10
    2 1
    3 2
    4 2
    5 1
    5 3
    4 1
    4 3
    5 2
    3 1
    5 4
    5
    1 1
    3 7 0 3
    4 0 7 4 6
    2 2 7
    4 5 0 2 13

    Sample Output

    Connected
    Connected
    Connected
    Connected
    Disconnected

    HINT

    N≤100000 M≤500000 Q≤50000 1≤K≤15

    数据保证没有重边与自环

    Tip:请学会使用搜索引擎

     

     

    Source

    [Submit][Status][Discuss]

    BZOJ3237的强制在线版,卡掉了CDQ分治。

    有一种很神的随机化,配合线性基解决。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #define rep(i,l,r) for (int i=l; i<=r; i++)
     6 #define For(i,x) for (int i=h[x],k; i; i=nxt[i])
     7 typedef long long ll;
     8 using namespace std;
     9 
    10 const int N=400010,M=1000010,SS=1000000000;
    11 int n,m,Q,cnt=1,u,v,x,k,ans,h[N],nxt[M],to[M],val[N],fa[N],a[45];
    12 bool vis[N],use[M];
    13 struct E{ int x,y,v; }e[M];
    14 void add(int u,int v){ nxt[++cnt]=h[u]; h[u]=cnt; to[cnt]=v; }
    15 
    16 void dfs(int x,int f){
    17     vis[x]=1;
    18     For(i,x) if ((k=to[i])!=f && !vis[k]) use[i>>1]=1,fa[k]=x,dfs(k,x);
    19 }
    20 
    21 void dfs2(int x){
    22     For(i,x) if (fa[k=to[i]]==x)
    23         dfs2(k),e[i>>1].v^=val[k],val[x]^=val[k];
    24 }
    25 
    26 int main(){
    27     freopen("bzoj3569.in","r",stdin);
    28     freopen("bzoj3569.out","w",stdout);
    29     scanf("%d%d",&n,&m); srand(20020223);
    30     rep(i,1,m) scanf("%d%d",&e[i].x,&e[i].y),add(e[i].x,e[i].y),add(e[i].y,e[i].x);
    31     dfs(1,0);
    32     rep(i,1,m) if (!use[i]) x=rand()%SS+1,e[i].v=x,val[e[i].x]^=x,val[e[i].y]^=x;
    33     dfs2(1); scanf("%d",&Q);
    34     while (Q--){
    35         scanf("%d",&k); memset(a,0,sizeof(a)); bool f=1;
    36         rep(i,1,k){
    37             scanf("%d",&x); x^=ans; x=e[x].v;
    38             for (int j=30; ~j; j--){
    39                 if (!((x>>j)&1)) continue;
    40                 if (!a[j]) { a[j]=x; break; }
    41                 x^=a[j];
    42             }
    43             if (!x) f=0;
    44         }
    45         if (!f) puts("Disconnected"); else puts("Connected"),ans++;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    win10笔记本实现双屏显示的自如切换
    word-如何将文字设置为插入超链接
    opencv-python教程学习系列13-图像平滑
    第12课 经典问题解析一
    第11课 新型的类型转换
    第10课 C++中的新成员
    第9课 函数重载分析(下)
    第8课 函数重载分析(上)
    第7课 函数参数的扩展
    第6课 内联函数分析
  • 原文地址:https://www.cnblogs.com/HocRiser/p/8983167.html
Copyright © 2011-2022 走看看