zoukankan      html  css  js  c++  java
  • loj#6157 A ^ B Problem

    分析

    用并查集维护

    每次一个连通块的每个点记录它到当前连通块的根的异或值

    对于不符合的情况容易判断

    最后判断是否都在一个连通块内然后记录答案即可

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[100100],b[100100],fa[100100],w[100100];
    inline int sf(int x){if(fa[x]==x)return x;int f=sf(fa[x]);w[x]^=w[fa[x]];return fa[x]=f;}
    int main(){
        int i,j,k,t,ok;
        scanf("%d",&t);
        while(t--){
          int mn=1e9+7,mx=0;
          ok=1;scanf("%d%d",&n,&m);
          for(i=1;i<=n;i++)fa[i]=i,w[i]=0;
          for(i=1;i<n;i++)scanf("%d%d",&a[i],&b[i]);
          for(i=1;i<=m;i++){
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            int xx=sf(x),yy=sf(y);
            if(xx==yy){
              if((w[x]^w[y])!=z)ok=0;
            }else {
              fa[xx]=yy;
              w[xx]=(w[x]^w[y]^z);
            }
          }
          if(!ok)puts("Impossible");
            else {
              for(i=1;i<n;i++){
                if(sf(a[i])!=sf(b[i])){
                  ok=0;
                  puts("No");
                  break;
                }
                mn=min(mn,(w[a[i]]^w[b[i]]));
                mx=max(mx,(w[a[i]]^w[b[i]]));
              }
              if(ok)printf("%d %d
    ",mn,mx);
          }
        }
        return 0;
    }
  • 相关阅读:
    搜狗输入法招聘数据挖掘、自然语言处理实习生
    python 备忘
    从零开始
    [转]随笔
    重学python
    关于tensorflow conv2d卷积备忘的一点理解
    python args kwargs 传递参数的区别
    something backup
    R语言命令汇总
    newwork setup
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11669427.html
Copyright © 2011-2022 走看看