洛谷 [P2420] 让我们异或吧
来源:互联网 发布:windows insider 编辑:程序博客网 时间:2024/06/15 13:44
某两点之间的路径上所有边权的异或值即dis1^dis2……^disn.
由于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
阅读全文
0 0
- 洛谷 [P2420] 让我们异或吧
- P2420 让我们异或吧
- CONTEST221 洛谷9月月赛Div.2 -P2420 让我们异或吧
- 洛谷 2420 让我们异或吧
- 洛谷 2420 让我们异或吧
- luogu2420 让我们异或吧
- luogu2420 让我们异或吧
- 【LCA】洛谷2420[让我们异或吧]题解
- luogu2420 让我们异或和吧
- 让我们开始吧
- 让我们反射吧
- 让我们一起挑战吧!
- 让我们开始吧
- 让我们一起来android吧
- 让我们离线吧
- 让我们继续吧
- 让我们抛弃char吧
- 让我们一起努力吧~
- IOI 1999 花店橱窗布置(DP)
- //创建一个数组, //实现函数init()初始化数组、 //实现empty()清空数组、 //实现reverse()函数完成数组元素的逆置。 //要求:自己设计函数的参数,返回值。
- LeetCode448. Find All Numbers Disappeared in an Array 解答
- case语句使用举例
- MongoDB基本操作
- 洛谷 [P2420] 让我们异或吧
- SpringBoot 使用WebSocket
- Angular路由
- game 游戏 (斜率优化dp)
- EasyUI时间插件----年月日,年月日时分秒
- 天凉心毋凉
- 对Android权限一些新的理解
- lua从固定table中随机出不重复的子table
- 【亲测可用】 CentOS6.8 网络配置ip 连接外网