比赛 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;
}