C. qym 的瞬间移动

    传统题 1000ms 256MiB

qym 的瞬间移动

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

众所周知,qym 很喜欢玩游戏,最近他又玩了一款解密类的迷宫游戏

这个游戏的地图中存在 nn 个房间,这 nn 个房间通过 n1n - 1 条道路相连,且题目保证没有房间不可达。

而每条道路有可能是不同的,有的可能存在陷阱,有的可能存在怪物,所以 qym 如果想通过一条道路,需要扣除相应的血量。

qym 作为一个大科(wai)学(gua)家,他给自己在游戏中增加了一次瞬间移动的机会,他可以从编号为 xx 的房间直接瞬移到 yy 的房间

因为 qym 很菜,所以虽然增加了一次瞬间移动,但是这次瞬间移动因为 BUGBUG,依旧需要扣除血量,而扣除的血量则为 xx 移动到 yy 路径上所有道路需要扣除血量的 异或和

现在 qym 想知道,自己从 xx 房间移动到 yy 房间需要扣除多少点血量

注意: 异或C/C++ 的计算符号为 ^, 异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用 1 表示真, 0 表示假 则异或的运算法则为:0 ^ 0 = 0,1 ^ 0=1,0 ^ 1=1,1 ^ 1=0(同为 0 ,异为 1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

例如 11 ^\hat{} 5=75 = 7, 55 ^\hat{} 5=05 = 0

输入格式

输入第一行包含两个正整数 n,mn, m,表示总共有 nn 个房间和 mm 次询问

接下来 n1n - 1 行每行包含三个整数 u,v,wu,v,w 分别表示房间 uu 到房间 vv 存在一条道路,通过这条道路需要扣除 ww 点血量

接下来 mm 行,每行包含两个整数 x,yx,y,表示 qym 想知道从房间 xx 瞬间移动到房间 yy 需要扣除多少血量

输出格式

对于每次询问输出一个整数,表示需要扣除的血量

数据范围

对于 30%30\% 的数据,n,m10n,m \leq 10

对于 70%70\% 的数据,n,m1000n,m \leq 1000

对于 100%100\% 的数据,n,m100000,x,ynn,m \leq 100000, x,y \leq n

对于 90%90\% 的数据每个点 ii 均与 floor(i/2)floor(i / 2) 有边

样例输入

5 5
2 1 12
3 1 5
4 3 7
5 4 2
4 3
5 3
2 1
3 2
4 1

样例输出

7
5
12
9
2

2025提高班模拟赛(21)

未参加
状态
已结束
规则
IOI
题目
3
开始于
2026-3-14 21:15
结束于
2026-3-24 21:15
持续时间
240 小时
主持人
参赛人数
6