[luoguP2420] 让我们异或吧(dfs + 异或的性质)
2017-05-04 15:39
176 查看
因为异或满足结合律和交换律。
a^b^b=a
所以这个题直接求根节点到每个点路径上的异或值。
对于每组询问直接输出根到两个点的异或值的异或的值。
——代码
#include <cstdio> #include <cstring> #define MAXN 200001 using namespace std; int n, m, cnt; int head[MAXN], to[MAXN], val[MAXN], next[MAXN], dis[MAXN]; bool vis[MAXN]; inline void add(int x, int y, int z) { to[cnt] = y; val[cnt] = z; next[cnt] = head[x]; head[x] = cnt++; } inline void dfs(int u) { int i, v;; vis[u] = 1; for(i = head[u]; i != -1; i = next[i]) { v = to[i]; if(!vis[v]) { dis[v] = dis[u] ^ val[i]; dfs(v); } } } int main() { int i, x, y, z; scanf("%d", &n); memset(head, -1, sizeof(head)); for(i = 1; i < n; i++) { scanf("%d %d %d", &x, &y, &z); add(x, y, z); add(y, x, z); } dfs(1); scanf("%d", &m); for(i = 1; i <= m; i++) { scanf("%d %d", &x, &y); printf("%d\n", dis[x] ^ dis[y]); } return 0; }View Code
相关文章推荐
- Zobrist Hash算法的基础:按位异或运算的性质
- 异或运算的性质及用途
- [转载]异或的性质及运用
- 异或的应用及性质
- 2017多校联合第7场/hdu 6121 Build a tree(K叉树的异或和)+满K叉树的性质总结
- HDU 4810 Wall Painting 异或性质
- 【JDFZOJ】最富有的人 Trie树+异或性质
- Codeforces Round #461 (Div. 2) B. Magic Forest(异或的性质)
- 用异或的性质实现简单加密解密
- POJ 1703 Find them, Catch them (并查集&利用异或的性质优化)
- 异或的性质&应用
- 异或的性质和运算
- 洛谷——P2420 让我们异或吧
- 血液检测的性质需要血液分析仪为我们详细介绍
- CF835E The penguin's game(异或性质+二分查找)
- 异或性质
- 异或的性质及运用
- XOR 异或的性质及应用
- 异或的性质和运算
- Codeforces Round #435 (Div. 2)C. Mahmoud and Ehab and the xor(异或的性质)