洛谷 P2420 让我们异或吧 树形dp
2018-02-28 21:14
351 查看
题目:
洛谷 P2420
分析:一种显然的想法是ans(u,v)=f[u] xor f[v] xor f[lca(u,v)] xor f[lca(u,v)];
显然后面两个等于0,直接等于f[u] xor f[v]。其中,f[x]表示x到根节点的路径异或值。
代码:
洛谷 P2420
分析:一种显然的想法是ans(u,v)=f[u] xor f[v] xor f[lca(u,v)] xor f[lca(u,v)];
显然后面两个等于0,直接等于f[u] xor f[v]。其中,f[x]表示x到根节点的路径异或值。
代码:
#include <iostream> #include <cstdio> using namespace std; const int maxn=100005; struct node{ int y,w,next; }adge[maxn*2]; int f[maxn],vis[maxn],ls[maxn]; int n,m,i,u,v,cnt; void add_adge(int u,int v,int w) { adge[++cnt].y=v; adge[cnt].w=w; adge[cnt].next=ls[u];ls[u]=cnt; adge[++cnt].y=u; adge[cnt].w=w; adge[cnt].next=ls[v];ls[v]=cnt; } void dfs(int x) { int c; for (c=ls[x];c>0;c=adge[c].next) { int y=adge[c].y; if (vis[y]==0) { vis[y]=1; f[y]=f[x]^adge[c].w; dfs(y); } } } int main() { scanf("%d",&n); for (i=1;i<n;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add_adge(u,v,w); } vis[1]=1; dfs(1); scanf("%d",&m); while (m--) { scanf("%d%d",&u,&v); printf("%d\n",f[u]^f[v]); } }
相关文章推荐
- 洛谷——P2420 让我们异或吧
- AC日记——让我们异或吧 洛谷 P2420
- 洛谷P2420 让我们异或吧 树上差分 dfs
- 【LCA】洛谷2420[让我们异或吧]题解
- 【洛谷】[ZJOI2007]时态同步-树形DP
- 洛谷 [P2420] 让我们异或吧
- 洛谷 1352 没有上司的舞会 树形DP
- CONTEST221 洛谷9月月赛Div.2 -P2420 让我们异或吧
- 【洛谷P2420】让我们异或吧
- 【洛谷1272】重建道路(树形DP)
- 洛谷P2015 二叉苹果树(树形dp)
- [洛谷 1070]加分二叉树---树形DP
- [洛谷 1352]没有上司的舞会---树形DP
- 【洛谷2458】【SDOI2006】保安站岗(树形DP)
- 树形dp-洛谷 P2014 选课
- 洛谷 2014 选课 树形DP 解题报告
- 洛谷4438 [Hnoi2018]道路 【树形dp】
- P2420 让我们异或吧(倍增)
- 【洛谷 2016】战略游戏 树形dp经典题目(类似没有上司的舞会)
- 树形DP【洛谷P3047】 [USACO12FEB]附近的牛Nearby Cows