• 洛谷——P3907 圈的异或


    P3907 圈的异或

    无向图$dfs$找环,并判断边权异或和是否为0

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    
    #define N 100000
    using namespace std;
    
    int head[N],tot;
    struct node{
        int to,next,w;
    }e[N];
    
    bool vis[N],bvis[N];
    int t,n,m;
    
    void add(int u,int v,int w){
        e[++tot].to=v,e[tot].next=head[u],head[u]=tot,e[tot].w=w;
    }
    
    bool flg;
    int orx[N];
    
    bool dfs(int u,int fa,int w){
        vis[u]=true,orx[u]=w;
        for(int i=head[u];i;i=e[i].next){
            int v=e[i].to;
            if(v==fa) continue;
            if(vis[v]){
                if(orx[u]^orx[v]^e[i].w) return true;
                continue;
            }
            if(dfs(v,u,w^e[i].w)) return true;
        }
        return false;
    }
    
    int main()
    {
        scanf("%d",&t);
        while(t--){
            memset(vis,0,sizeof(vis));
            memset(bvis,0,sizeof(bvis));
            memset(head,0,sizeof(head));
            memset(e,0,sizeof(e));
            tot=1;
            scanf("%d%d",&n,&m);
            for(int u,v,w,i=1;i<=m;i++){
                scanf("%d%d%d",&u,&v,&w);
                add(u,v,w),add(v,u,w);
            }
            flg=false;
            for(int i=1;i<=n;i++){
                if(!vis[i]&&!flg)
                    flg|=dfs(i,0,0);
            }
            if(flg) printf("No
    ");
            else printf("Yes
    ");
        }
        
        return 0;
    }
  • 相关阅读:
    HDU
    Groundhog Build Home
    The Moving Points
    Problem I. Count
    Problem E. TeaTree
    树的启发式合并
    Special Segments of Permutation
    网络流24题
    2015-2016 Northwestern European Regional Contest (NWERC 2015)
    The 2018 ACM-ICPC Asia Beijing Regional Contest
  • 原文地址:https://www.cnblogs.com/song-/p/9810875.html
Copyright © 2020-2023  润新知