提交时间:2022-07-13 11:52:08

运行 ID: 51550

#include <bits/stdc++.h> using namespace std; struct Node { int v,w,next; } T[100005]; int n,m,p,lim; int H[100005],B[10000005]; void Add(int x,int y,int z) { T[++p]=Node {y,z,H[x]}; H[x]=p; } void Search(int S,int E) { if(S==E) { B[T[S].w]++; return ; } for(int i=H[S]; i; i=T[i].next) { B[T[i].w]++; Search(T[i].v,E); } } int main() { //freopen("game.in","r",stdin); //freopen("game.out","w",stdout); scanf("%d",&n); for(int i=1,x,y,z; i<=n-1; i++) { scanf("%d%d%d",&x,&y,&z); Add(x,y,z); } scanf("%d",&m); for(int i=1,U,V,R; i<=m; i++) { scanf("%d%d%d",&U,&V,&R); if(U>V) swap(U,V); int low=0; Search(U,V); for(int i=1; i<=R; i++) { if(!B[i]) continue; if(B[i]%2==1) low=max(low,i); } cout<<R-low<<'\n'; memset(B,0,sizeof(B)); } return 0; }