wa了10分求助大佬
查看原帖
wa了10分求助大佬
148092
Dark_lightrq楼主2024/1/17 20:05
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,q;
struct node{
	int x,y,z;
}e[N];
bool cmp1(node a,node b){
	return a.z>b.z;
}
struct zrq{
	int k,v,id;
}a[N];
bool cmp2(zrq a,zrq b){
	return a.k>b.k;
}
int fa[N];
int size[N];
int ans[N];
int find(int x){
	return fa[x]^x?fa[x]=find(fa[x]):x;
}
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<n;i++){
		scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);
	}
	for(int i=1;i<=n;i++){
		fa[i]=i,size[i]=1;
	}
	sort(e+1,e+n,cmp1);
	for(int i=1;i<=q;i++){
		scanf("%d%d",&a[i].k,&a[i].v);
		a[i].id=i;
	}
	sort(a+1,a+1+q,cmp2);
	int l=1;
	for(int i=1;i<=q;i++){
		while(l<n&&e[l].z>=a[i].k){
			int x=find(e[i].x),y=find(e[i].y);
			if(x^y){
				fa[x]=y;
				size[y]+=size[x];
			}
			l++;
		}
		ans[a[i].id]=size[find(a[i].v)]-1;
	}
	for(int i=1;i<=q;i++){
		printf("%d\n",ans[i]);
	}
	return 0;
}
2024/1/17 20:05
加载中...