78分,暴力搜索2WA求助!
查看原帖
78分,暴力搜索2WA求助!
804607
rainygame楼主2022/11/18 19:00

代码:

#include <bits/stdc++.h>
using namespace std;
#define MAXN 10000

long long p, road, id, ans = LONG_LONG_MAX;
char start, e;
bool vis[52];

struct Edge{
	int start, e, road;
}edges[MAXN];

void dfs(int x, int road, int start){
	if (vis[x]) return;
	if (road >= ans) return;
	vis[x] = true;
	
	if (x == 25){
		id = start;
		ans = road;
		return;
	}
	
	for (int i=1; i<=p; i++){
		if (edges[i].start == x) dfs(edges[i].e, road+edges[i].road, start);
		else if (edges[i].e == x) dfs(edges[i].start, road+edges[i].road, start);
	}
}

int CTI(char ch){
	if (ch >= 'a') return ch-'a'+26;
	return ch-'A';
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> p;
	for (int i=1; i<=p; i++){
		cin >> start >> e >> road;
		edges[i].start = CTI(start);
		edges[i].e = CTI(e);
		edges[i].road = road;
	}
	
	for (int i=0; i<25; i++){
		memset(vis, false, sizeof(vis));
		dfs(i, 0, i);
	}
	
	cout << char(id+'A') << ' ' << ans;

	return 0;
}

2022/11/18 19:00
加载中...