求助dijkstra 78分
查看原帖
求助dijkstra 78分
572482
Dream_weavers楼主2022/3/2 20:32

WA点3、5,QAQ

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f;
const int N=1e5+5;
int n,m; 
char ans;

struct Edge{
	int v,w;
	Edge(int v,int w):v(v),w(w){}
};
 
struct Node{
	int u,d;
	Node(int u,int d):u(u),d(d){}
	bool operator < (const Node &a) const{
		return d>a.d;
	}
};

int d[N],vis[N];
vector<Edge> adj[N];

void dij(int s){
	for(int i=1;i<=200;i++)d[i]=INF;
	d[s]=0;
	priority_queue<Node>q;
	q.push(Node(s,0));
	while(!q.empty()){
		int u=q.top().u;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=0;i<adj[u].size();i++){
			int v=adj[u][i].v;
			int w=adj[u][i].w;
			if(d[v]>d[u]+w){
				d[v]=d[u]+w;
				q.push(Node(v,-d[v]));
			}
		}
	}
}
signed main(){
	cin>>n;
	for(int i=0;i<n;i++){
		char u,v;
		int w;
		cin>>u>>v>>w;
		adj[(int)u].push_back(Edge((int)v,w));
		adj[(int)v].push_back(Edge((int)u,w));
	}
	dij((int)'Z');
	ans='A';
	for(int i='B';i<='Y';i++)
		if(d[(int)i]<d[(int)ans])
			ans=i;
	cout<<ans<<" "<<d[(int)ans];
    return 0;
}

2022/3/2 20:32
加载中...