• [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
  • 相关阅读:
    PL/SQL Developer连接Oracle
    Oracle 11g 监听命令
    Oracle 11g的登陆问题
    PL/SQL Developer 配置和使用
    KMP应用求两个字符串的最长公共子串
    msc pool概念
    nformix调优之执行计划取得
    lsof 与fuser
    informix onstat命令收集
    各类系统上查看占cpu最多的进程
  • 原文地址:https://www.cnblogs.com/zhenghaotian/p/6807459.html
Copyright © 2020-2023  润新知