| 比赛 |
2026.4.11 |
评测结果 |
EEEETTTEETE |
| 题目名称 |
rldcot |
最终得分 |
0 |
| 用户昵称 |
汐汐很希希 |
运行时间 |
5.408 s |
| 代码语言 |
C++ |
内存使用 |
22.44 MiB |
| 提交时间 |
2026-04-11 11:46:44 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
const int M=5e5+10;
vector<int> g[N];
vector<int> e[N];
ll s[N],depth[N],up[N][20];
bool vis[N];
int n,m;
void dfs(int u,int w)
{
s[u]=w;
vis[u]=1;
for(int i=0;i<g[u].size();i++){
int v=g[u][i],w1=e[u][i];
if(vis[v]==0){
vis[v]=1;
dfs(v,w+w1);
}
}
return;
}
void dfs1(int u,int p){
up[u][0]=p;
for(int i=1;i<20;i++) up[u][i]=up[up[u][i-1]][i-1];
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(v==p) continue;
depth[v]=depth[u]+1;
dfs1(v,u);
}
}
int lca(int v,int u){
if(depth[u]<depth[v]) swap(u,v);
int dif=depth[u]-depth[v];
for(int i=0;i<20;i++)
{
if(dif&(1<<i)) u=up[u][i];
}
if(u==v) return u;
for(int i=19;i>=0;i--){
if(up[u][i]!=up[v][i])
{
u=up[u][i];
v=up[v][i];
}
}
return up[u][0];
}
int main()
{
freopen("rldcot.in","r",stdin);
freopen("rldcot.out","w",stdout);
cin>>n>>m;
for(int i=1;i<n;i++){
int u,v,d;
cin>>u>>v>>d;
g[u].push_back(v);
e[u].push_back(d);
g[v].push_back(u);
e[v].push_back(d);
}
dfs(1,0);
depth[1]=0;
dfs1(1,1);
while(m--){
memset(vis,0,sizeof(vis));
int l,r,ans=0;
cin>>l>>r;
for(int i=l;i<=r;i++){
for(int j=i+1;j<=r;j++){
if(i!=j){
int t=lca(i,j);
ll t1=s[t];
if(vis[t1]==0){
vis[t1]=1;
ans++;
}
}
}
}
cout<<ans<<endl;
}
return 0;
}