zoukankan      html  css  js  c++  java
  • [luoguP2420] 让我们异或吧(dfs + 异或的性质)

    传送门

    因为异或满足结合律和交换律。

    a^b^b=a

    所以这个题直接求根节点到每个点路径上的异或值。

    对于每组询问直接输出根到两个点的异或值的异或的值。

    ——代码

     1 #include <cstdio>
     2 #include <cstring>
     3 #define MAXN 200001
     4 
     5 using namespace std;
     6 
     7 int n, m, cnt;
     8 int head[MAXN], to[MAXN], val[MAXN], next[MAXN], dis[MAXN];
     9 bool vis[MAXN];
    10 
    11 inline void add(int x, int y, int z)
    12 {
    13     to[cnt] = y;
    14     val[cnt] = z;
    15     next[cnt] = head[x];
    16     head[x] = cnt++;
    17 }
    18 
    19 inline void dfs(int u)
    20 {
    21     int i, v;;
    22     vis[u] = 1;
    23     for(i = head[u]; i != -1; i = next[i])
    24     {
    25         v = to[i];
    26         if(!vis[v])
    27         {
    28             dis[v] = dis[u] ^ val[i];
    29             dfs(v);
    30         }
    31     }
    32 }
    33 
    34 int main()
    35 {
    36     int i, x, y, z;
    37     scanf("%d", &n);
    38     memset(head, -1, sizeof(head));
    39     for(i = 1; i < n; i++)
    40     {
    41         scanf("%d %d %d", &x, &y, &z);
    42         add(x, y, z);
    43         add(y, x, z);
    44     }
    45     dfs(1);
    46     scanf("%d", &m);
    47     for(i = 1; i <= m; i++)
    48     {
    49         scanf("%d %d", &x, &y);
    50         printf("%d
    ", dis[x] ^ dis[y]);
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    equals 和 == 的区别
    jenkins
    状态码
    对控制反转和依赖注入的突然顿悟
    分布式事务与Seate框架
    synchronized原理
    VS 添加 Sqlserver
    C# 生成二维码
    jQuery /Date(0000000000000)/日期转换
    什么是Java的序列化,在哪些程序中见过Java序列化?
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6807459.html
Copyright © 2011-2022 走看看