• [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 }
  • 相关阅读:
    中国VR公司的详尽名单
    maven打包源代码sources.jar和javadoc.jar帮助文档
    中国计算机学会推荐国际学术刊物
    myhuiban会议,期刊,科研人员,计算机类会议大全
    如何写mysql的定时任务
    mysql系列命令解释
    Bootstrap 导航元素
    base64对文件进行加密
    我最在行 诗词 连续错误的
    <% %> in html
  • 原文地址:https://www.cnblogs.com/HocRiser/p/8983167.html
Copyright © 2020-2023  润新知