USACO2.4.4 Bessie Come Home (comehome)

裸的最短路所以spfaspfaspfa。

/*
ID:shijiey1
PROG:comehome
LANG:C++
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

#define INF 0x3f3f3f3f

using namespace std;

struct Edge{
	int v, to;
};

int m, n = 0;
vector<Edge> edges[65];
int dist[65];
int done[65];
queue<int> buff;
void spfa(int s) {
	for (int i = 0; i < n; i++) {
		dist[i] = INF;
	}
	dist[s] = 0;
	done[s] = 1;
	buff.push(s);
	while (!buff.empty()) {
		int current = buff.front();
		buff.pop();
		for (int i = 0; i < edges[current].size(); i++) {
			Edge e = edges[current][i];
			if (dist[e.to] > dist[current] + e.v) {
				dist[e.to] = dist[current] + e.v;
				if (!done[e.to]) {
					buff.push(e.to);
					done[e.to] = 1;
				}
			}
		}
		done[current] = 0;
	}

}

int main() {
	freopen("comehome.in", "r", stdin);
	freopen("comehome.out", "w", stdout);
	scanf("%d\n", &m);
	char a, b;
	int c;
	for (int i = 0; i < m; i++) {
		scanf("%c %c %d\n", &a, &b, &c);
		n = max(n, max(a - 'A', b - 'A'));
		Edge e;
		e.to = b - 'A';
		e.v = c;
		edges[a - 'A'].push_back(e);
		e.to = a - 'A';
		edges[b - 'A'].push_back(e);
	}
	n++;
	spfa('Z' - 'A');
	int idx = -1;
	int minn = INF;
	for (int i = 0; i <= 'Y' - 'A'; i++) {
		if (dist[i] < minn) {
			minn = dist[i];
			idx = i;
		}
	}
	printf("%c %d\n", idx + 'A', dist[idx]);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值