洛谷 [P2420] 让我们异或吧
2017-10-16 20:22
316 查看
某两点之间的路径上所有边权的异或值即dis1^dis2……^disn.
由于x^y^y=x,所以dfs预处理出每一点到根节点的异或值,对于每次询问,直接输出 disu^disv.
p2420
由于x^y^y=x,所以dfs预处理出每一点到根节点的异或值,对于每次询问,直接输出 disu^disv.
#include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> using namespace std; int read(){ int rv=0,fh=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') fh=-1; c=getchar(); } while(c>='0'&&c<='9'){ rv=(rv<<1)+(rv<<3)+c-'0'; c=getchar(); } return rv*fh; } const int MAXN=100005; int n,m,po[MAXN],dis[MAXN],nume,numq; bool f[MAXN]; struct edge{ int to,nxt,dis; }e[MAXN*2]; void adde(int from,int to,int dis){ e[++nume].to=to; e[nume].nxt=po[from]; e[nume].dis=dis; po[from]=nume; } void dfs(int u,int val){ f[u]=1; dis[u]=val; for(int i=po[u];i;i=e[i].nxt){ int v=e[i].to; if(!f[v]){ dfs(v,val^e[i].dis); } } } int main(){ freopen("in.txt","r",stdin); n=read(); for(int i=1;i<n;i++){ int u=read(),v=read(),dis=read(); adde(u,v,dis);adde(v,u,dis); } m=read(); dfs(1,0); for(int i=1;i<=m;i++){ int u=read(),v=read(); //addq(u,v,num);addq(u,v,num); printf("%d\n",dis[u]^dis[v]); } fclose(stdin); return 0; }
p2420
相关文章推荐
- CONTEST221 洛谷9月月赛Div.2 -P2420 让我们异或吧
- 【洛谷P2420】让我们异或吧
- 洛谷 P2420 让我们异或吧 树形dp
- 洛谷 2420 让我们异或吧
- P2420 让我们异或吧
- 洛谷P2420 让我们异或吧 树上差分 dfs
- 01Trie树【p2420】 让我们异或吧
- AC日记——让我们异或吧 洛谷 P2420
- P2420 让我们异或吧
- 洛谷 2420 让我们异或吧
- 洛谷——P2420 让我们异或吧
- luogu2420 让我们异或吧
- luogu2420 让我们异或吧
- 让我们异或吧
- luogu2420 让我们异或吧
- 洛谷P2420 让我们异或吧
- luogu2420 让我们异或吧
- 洛谷P2420 让我们异或吧
- 让我们异或吧
- 【LCA】洛谷2420[让我们异或吧]题解