| 比赛 |
2026.4.11 |
评测结果 |
WTTTTTTTTTA |
| 题目名称 |
rldcot |
最终得分 |
10 |
| 用户昵称 |
彭欣越 |
运行时间 |
8.150 s |
| 代码语言 |
C++ |
内存使用 |
17.60 MiB |
| 提交时间 |
2026-04-11 12:07:02 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
int n,m,ans,h[N];
ll d[N],f[N][22];
int head[N],tot;
struct node {
int v,w,nxt;
}e[N*2];
void add (int u,int v,int w) {
e[++tot].v=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot;
}
ll LCA (int x,int y) {
if (h[x]>h[y]) swap(x,y);
for (int i=20;i>=0;i--) {
if (h[f[y][i]]>=h[x]) y=f[y][i];
}
if (x==y) return x;
for (int i=20;i>=0;i--) {
if (f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
}
//if (x==1) return 1;
return f[x][0];
}
void dfs (int u,int fa) {
h[u]=h[fa]+1;
for (int i=head[u];i;i=e[i].nxt) {
int v=e[i].v,w=e[i].w;
if (v==fa) continue;
d[v]=d[u]+w;
f[v][0]=u;
dfs(v,u);
for (int j=1;j<=20;j++) {
f[v][j]=f[f[v][j-1]][j-1];
}
}
}
int main () {
freopen("rldcot.in","r",stdin);
freopen("rldcot.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> m;
for (int i=1;i<n;i++) {
int a,b,c;
cin >> a >> b >> c;
add(a,b,c);
add(b,a,c);
}
dfs(1,0);
while (m--) {
int l,r;
cin >> l >> r;
map<ll,int>mp;
ans=0;
for (int i=l;i<=r;i++) {
for (int j=i;j<=r;j++) {
if (!mp[d[LCA(i,j)]]) {
mp[d[LCA(i,j)]]++;
ans++;
}
}
}
cout << ans <<endl;
}
return 0;
}