比赛 2026.4.11 评测结果 ATTETEEEEEA
题目名称 rldcot 最终得分 19
用户昵称 ChenBp 运行时间 4.032 s
代码语言 C++ 内存使用 48.89 MiB
提交时间 2026-04-11 12:05:34
显示代码纯文本
#include<iostream>
#include<set>
using namespace std;
int n,m;
const int N=5e4+4,M=1e4+4;
int hd[N],nxt[M*2],to[M*2],vl[M*2],num=1;
void add(int u,int v,int w) {
	num++;
	to[num]=v;
	vl[num]=w;
	nxt[num]=hd[u];
	hd[u]=num;
}
long long fa[N][30],dep[N],d[N];
void dfs(int u,int f) {
	dep[u]=dep[f]+1;
	fa[u][0]=f;
	for(int i=1; i<=25; i++) {
		fa[u][i]=fa[fa[u][i-1]][i-1];
	}
	for(int i=hd[u]; i; i=nxt[i]) {
		int v=to[i];
		if(v==f) continue;
		d[v]=d[u]+vl[i];
		dfs(v,u);
	}
}
int lca(int x,int y) {
	if(dep[x]<dep[y])swap(x,y);
	for(int i=25; i>=0; i--) {
		if(dep[fa[x][i]]>=dep[y]) x=fa[x][i];
	}
	if(x==y) return x;
	for(int i=25; i>=0; i--) {
		if(fa[x][i]!=fa[y][i]) {
			x=fa[x][i];
			y=fa[y][i];
		}
	}
	return fa[x][0];
}
int main() {
    freopen("rldcot.in","r",stdin);
    freopen("rldcot.out","w",stdout);
	cin>>n>>m;
	for(int i=1; i<=n-1; i++) {
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	}
	dfs(1,0);
	while(m--) {
		int l,r;
		cin>>l>>r;
		set<long long>se;
		for(int i=l; i<=r; i++) {
			for(int j=l; j<=r; j++) {
				se.insert(d[lca(i,j)]);
			}
		}
		cout<<se.size()<<endl;
	}
	return 0;
}