RE on #10
查看原帖
RE on #10
1048875
GLY0912楼主2024/6/8 20:27
#include <iostream>
#include <cstring>
#include <queue>
#define M 100001
#define N 50001
#define maxn 0x3f3f3f
using namespace std;
int n,m,b,head[N],dis[N],cnt=0;
bool vis[N];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct node{
	int to,next,w;
}edge[M];
void add(int u,int v,int w){
	edge[cnt].w=w;
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	head[u]=cnt++;
	return ;
}
void dijkstra(){
	q.push(make_pair(0,1));
	dis[1]=0;
	while(!q.empty()){
		int now=q.top().second;
		q.pop();
		if(vis[now]) continue;
		vis[now]=1;
		for(int i=head[now];i!=-1;i=edge[i].next){
			if(dis[edge[i].to]>dis[now]+edge[i].w){
				dis[edge[i].to]=dis[now]+edge[i].w;
				q.push(make_pair(dis[edge[i].to],edge[i].to));
			}
		}
	}return ;
}
int main(){
	memset(dis,maxn,sizeof dis);
	memset(head,-1,sizeof head);
	int u,v,w;
	cin>>n>>m>>b;
	while(m--) cin>>u>>v>>w,add(u,v,w),add(v,u,w);
	dijkstra();
	while(b--){
		cin>>u>>v;
		cout<<dis[u]+dis[v]<<endl;
	}return 0;
}
2024/6/8 20:27
加载中...