67pts求条
查看原帖
67pts求条
1412149
Dog_77楼主2025/2/7 14:16

得分记录

#include<bits/stdc++.h>
#define itn int
#define ll long long
#define ld long double
#define str string
#define enld endl
#define endl '\n'
#define pii pair<int,int>
#define pci pair<char,int>
#define pb push_back
const int N = 1e5+50;
using namespace std;
vector<pci>a[N];
int n,m,s;
int dis[N],vis[N];
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//解除cin,cout封印,但是不能用scanf,printf
//	freopen("文件名.in","r",stdin);
//	freopen("文件名.out","w",stdout); //文件读写
	cin >>n;
	for(int i=1;i<=n;i++){
		char u,v;
		int w;cin >>u >>v >>w;
		a[v].pb({u,w});
	}
	priority_queue<pci,vector<pci>,greater<pci>>q; //优先队列 greater<pii> 改变排列原本:大->小 现:小->大
	for(int i=1;i<N;i++) dis[i]=INT_MAX;
	dis['Z']=0;
	q.push({0,'Z'});
	while(q.size()){
		int y=q.top().second;
		q.pop();
		if(vis[y]!=0) continue;
		vis[y]=1;
		for(auto i:a[y]){
			int v=i.first,x=i.second;
			if(dis[y]+x<dis[v]){
				dis[v]=dis[y]+x;
				q.push({dis[v],v});
			}
		}
	}
	int bj='A',mi=INT_MAX;
	for(int i='A';i<'Z';i++){
		if(dis[i]<mi){
			mi=min(dis[i],mi);
			bj=i;
		}
	}
	cout <<char(bj) <<" " <<dis[bj] <<endl;
	return 0;
}
2025/2/7 14:16
加载中...