躲避拥挤

发布时间 2023-07-28 20:29:15作者: 五星级神机

题目描述

小明很想出去走走。但是小明讨厌太拥挤的地方,她会拒绝一些人气旺盛的道路。有  个景点,有  双向道路。每条道路有一个人气值 ,表示这条道路的拥挤程度。小明不会经过那些人气值大于  的道路,他想知道有多少对景点  使得从  景点出发可以到达  景点。

输入格式

第一行一个整数 ,表示有  组数据。

对于每组数据,第一行有三个数 , 表示有  组询问。

接下来  行,每行三个数 ,表示有一条连接 ,人气值为  的道路。

最后  行,每行一个整数 ,代表询问。

输出格式

对于每组数据,输出  行,依次回答所有询问。

样例

样例输入

1
5 5 3
2 3 6334
1 5 15724
3 5 5705
4 3 12382
1 3 21726
6000
10000
13000

样例输出

2
6
12

 

 

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e4+10;
int T,fa[MAXN],cnt[MAXN];

inline int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);	
}

inline merge(int x,int y){
	int fax=find(x),fay=find(y);
	fa[fax]=fay;	
}

struct nod1{
	int x,y,d;
}edges[MAXN*5];

inline int cmp1(nod1 a,nod1 b){
	return a.d<b.d;	
}

struct nod2{
	int id,x;
}query[MAXN*5];

inline int cmp2(nod2 a,nod2 b){
	return a.x<b.x;	
}

int main() {
	
	cin>>T;
	while(T--){
		
		int n,m,q;cin>>n>>m>>q;
		for (int i=1;i<=n;i++) cnt[i]=1,fa[i]=i;
		
		for (int i=1;i<=m;i++) cin>>edges[i].x>>edges[i].y>>edges[i].d;			
		sort(edges+1,edges+1+m,cmp1);
		
		for (int i=1;i<=q;i++) cin>>query[i].x,query[i].id=i;			
		sort(query+1,query+1+q,cmp2);		
		
		
		
		
	}
    return 0;
}