比赛 CSP2023-S模拟赛 评测结果 RRRRRRRRRRRRRRRRRRRR
题目名称 坡伊踹 最终得分 0
用户昵称 hnzzlza 运行时间 0.012 s
代码语言 C++ 内存使用 10.31 MiB
提交时间 2023-10-17 21:03:05
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,q,a[200005],head[200005],num_edge,ee[200005];
struct Node{
	int next=-1,v,w;
}edge[200005];
int u,v,w;
int build(int u,int v,int w){
	edge[++num_edge].next=head[u];
	edge[num_edge].v=v;
	edge[num_edge].w=w;
	head[u]=num_edge;
}
bool all1=1,all2=1;
int dis(int u,int v){
	if(u==v)return 0;
	return edge[head[u]].w+dis(edge[head[u]].v,v);
}
int main(){
	//freopen("poitry.in","r",stdin);
	//freopen("poitry.out","w",stdout);
	cin>>n>>q;
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	for(int i=1;i<n;++i){
		scanf("%d%d%d",&u,&v,&w);
		build(u,v,w);
//		build(v,u,w);
		if(u!=1)all1=0;
		if(v!=u+1)all2=0;
		if(all1)ee[v]=w;
	}
	if(all1){
		while(q--){
			cin>>u>>v;
			int diss=ee[u]+ee[v];
			cout<<min(max(a[u],0),min(max(a[1],ee[u]),max(a[v],diss)))<<'\n';
		}
		return 0;
	}
//	if(all2){
//		int minn=0x7fffffff;
//		while(q--){
//			cin>>u>>v;
//			dis(min(u,v),max(u,v));
//		}
//	}
	return 0;
}