良好马蜂dij 玄关求条
查看原帖
良好马蜂dij 玄关求条
1073754
__szh_DNCB__楼主2024/10/22 21:25
#include <bits/stdc++.h>
#define inf 0x7f7f7f7f
using namespace std;
const int maxn = 100;
struct node {
	int v,w;
};

vector<node> G[maxn];
int vis[maxn],dis[maxn];
int n;
int cnt[200] = {};

void insert(int u,int v,int w){
	G[u].push_back(node{v,w});
}

void dijkstra(int s){
	memset(vis,0,sizeof vis);
	memset(dis,inf,sizeof dis);
	dis[s] = 0;
	for (int i=1;i<=n;i++){
		int mi = inf,u;
		for (int j=1;j<=n;j++){
			if (vis[j] == 0 && dis[j] < mi){
				mi = dis[j];
				u = j;
			}
		}
		vis[u] = 1;
		for (int j=0;j<G[i].size();j++){
			int v = G[u][j].v,w = G[u][j].w;
			if (dis[v] > dis[u] + w){
				dis[v] = dis[u] + w;
			}
		}
	}
}

int main(){
	cin >> n;
	for (int i=1;i<=n;i++){
		char a1,b1;
		int c;
		cin >> a1 >> b1 >> c;
		if (a1 >= 'A' && a1 <= 'Z'){
			cnt[int(a1)] = 1;
		}
		if (b1 >= 'A' && b1 <= 'Z'){
			cnt[int(b1)] = 1;
		}
		int a = int(a1),b = int(b1);
		insert(a,b,c);
		insert(b,a,c);
	}
	int s = 'Z';
	dijkstra(s);
	char place;
	int minn = inf;
	for (int i='A';i<='Y';i++){
		if (cnt[int(i)] == 0)continue;
		if (dis[int(i)] < minn){
			minn = dis[int(i)];
			place = i;
		}
	}
	cout << place << ' ' << minn;
	return 0;
}

用的 dijkstra 板子,6RE + 3WA

2024/10/22 21:25
加载中...