zoukankan      html  css  js  c++  java
  • zstu校赛4191——DFS——无向图找环

    Description

     给你一副无向图,每条边有边权,保证图联通,现在让你判断这个图是否有异或值大于零的环存在。

     

    Input

     多组测试数据,每组先输入两个数n m,表示图的点跟边的数量。

    然后是m行,每行三个数a b c。代表一条边的起点,终点,边权。

    1 <= n<= 100000, 1 <= m <= 200000.

    1 <= a <= n, 1 <= b <= n, a != b.

    0 <= c <= 32767

    Output

     对于每组数据输出Yes或者 No。

    Sample Input

    3 3
    1 2 0
    2 3 1
    3 1 1
    

    Sample Output

    No

    HINT

     

    Source

    Wuyiqi

    大意:用邻接表+DFS,异或环就是这个环里的所有值的异或sum

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int MAX1 = 400100,MAX = 400100;
    struct edge{
        int u, v, w, nxt;
    }a[MAX];
    int head[MAX],sumxor[MAX1];
    int vis[MAX1];
    int n,m,E;
    int u,v,w;
    int flag ;
    void add(int u,int v,int w){
        a[E].u = u;a[E].v = v;a[E].w = w;a[E].nxt = head[u];
        head[u] = E++;
        a[E].u = v;a[E].v = u;a[E].w = w;a[E].nxt = head[v];
        head[v] = E++;
    }
    void dfs(int u)
    {
        for(int i = head[u]; i != -1; i = a[i].nxt){
            if(!vis[a[i].v]){
                vis[a[i].v] = 1;
                sumxor[a[i].v] = sumxor[u]^a[i].w;
                dfs(a[i].v);
            }
            else {
                if(sumxor[a[i].v]^sumxor[u]^a[i].w){
                    flag = 1;
                return ;
                }
            }
        }
    }
    int main(){
     while(~scanf("%d%d",&n,&m)){
         E = 0;
         flag = 0;
         fill(head,head+n+1,-1);
         fill(vis,vis+n+1,0);
         vis[1] = 1;
         sumxor[1] = 0;
         while(m--){
          scanf("%d%d%d",&u,&v,&w);
          add(u,v,w);
         }
         dfs(1);
        if(flag == 1)
            printf("Yes
    ");
        else printf("No
    ");
        }
     return 0;
    }
    View Code
  • 相关阅读:
    js-添加删除记录-修改
    js-添加删除记录-添加
    js-添加删除记录-删除
    dom增删改
    事件的冒泡
    div随鼠标在浏览器的窗口任意移动
    多选框全选练习
    python-day3
    python-day2
    python-day1
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4437861.html
Copyright © 2011-2022 走看看