比赛 暑期小训练题 评测结果 AAAAAAAAAA
题目名称 牧场旅行 最终得分 100
用户昵称 nichengyan 运行时间 0.078 s
代码语言 C++ 内存使用 12.04 MiB
提交时间 2021-07-11 20:30:48
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int maxn=1500;
int v,qr;
struct E{
	int to,val,lst;
}edge[maxn*maxn];
int head[maxn*maxn],cnt=1;
void add(int a,int b,int c){
	edge[cnt].to=b;
	edge[cnt].val=c;
	edge[cnt].lst=head[a];
	head[a]=cnt;
	cnt++;
}
void init(){
	cin>>v>>qr;
	for(int i=1;i<v;i++){
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
		add(b,a,c);
	}
}
int dis[maxn];
int q[maxn*10],front=0,rear=0;
void spfa(int s){	
	front=0;
	rear=0;
	for(int i=1;i<=maxn;i++){
		dis[i]=1000000;
	}
	q[front]=s;
	dis[s]=0;
	front++;
	while(front!=rear){
		for(int i=head[q[rear]];i;i=edge[i].lst){
			int now=edge[i].to;
			if(dis[now]>dis[q[rear]]+edge[i].val){
				dis[now]=dis[q[rear]]+edge[i].val;
				q[front]=now;
				front++;
			}
		}
		rear++;
	}
}
int main(){
	freopen("pwalk.in","r",stdin);
	freopen("pwalk.out","w",stdout);
	init();
	for(int i=1;i<=qr;i++){
		int st,en;
		cin>>st>>en;
		spfa(st);
		cout<<dis[en]<<endl;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}