欲望以提升热忱,毅力以磨平高山!|

XichenOC

园龄:1个月粉丝:4关注:0

2025-01-20 19:04阅读: 10评论: 0推荐: 0

P2984 [USACO10FEB] Chocolate Giving S

P2984 [USACO10FEB] Chocolate Giving S

题目理解:

本题就是给你一个无向图,求从其中一个点到另一个点(其中必经过\(1\)号点)的最短路。我们只需要转换一下,也就是求从一号点到任意一点的最短路,询问时只需要输出一号点到那两个点的最短路和即可。用\(Dijkstra\)跑一遍即可

完整代码:

#include<bits/stdc++.h>
using namespace std;
const int N=50010;
struct edge{
	int v,w;
};
struct node{
	int dis,u;
	bool operator>(const node& a)const{return dis>a.dis;}
};
int dis[N],vis[N];
priority_queue<node,vector<node>,greater<node>>q;
vector<edge>e[N];
void dijkstra(){
	memset(dis,0x3f,sizeof(dis));
	q.push({0,1});
	dis[1]=0;
	while(!q.empty()){
		int u=q.top().u;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(auto ed:e[u]){
			int w=ed.w,v=ed.v;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				q.push({dis[v],v});
			}
		}
	}
}
int main(){
	int n,m,b;
	cin>>n>>m>>b;
	for(int i=1;i<=m;i++){
		int u,v,w; 
		cin>>u>>v>>w;
		e[u].push_back({v,w});
		e[v].push_back({u,w});
	}
	dijkstra(); 
	for(int i=1;i<=b;i++){
		int x,y;
		cin>>x>>y;
		cout<<dis[x]+dis[y]<<endl;
	}
}

\(dijkstra\)原理讲解

本文作者:XichenOC

本文链接:https://www.cnblogs.com/XichenOC/p/18682342

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   XichenOC  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起