MLE求教
  • 板块灌水区
  • 楼主Xu_Jinyi_2011
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/19 15:50
  • 上次更新2024/10/19 16:33:58
查看原帖
MLE求教
1136033
Xu_Jinyi_2011楼主2024/10/19 15:50

rt

题目传送门

#include <vector>
#include <cstring>
#include <iostream>
#include <limits.h> 
#include <algorithm>
#include <unordered_map>

#define ll long long 

using namespace std;

int A, B, n;

bool s[1010], e[1010];// reach ?

// ver & map
int p[1010], m[1010];
vector<int> ro[1010];
vector<int> map[100010];
int v[100010][1010];

long long ans1 = LONG_LONG_MAX, ans2 = LONG_LONG_MAX;

bool flag2;

void dfs(int r, ll pr, ll num, int city) {
	if (pr > ans1 || (pr == ans1 && ans2 < num)) {
		return;
	}
	if (city == B) {
		flag2 = 1;
		if (pr < ans1 || (pr == ans1 && ans2 > num)) {
			ans1 = pr;
  	   		ans2 = num;
 		}
 		return;
  	}
	for (int i = 0; i < map[city].size(); i ++) {
		int it = map[city][i];
		if (ro[it][m[it] - 1] == city) continue;
		if (it == r) {
			dfs(it, pr, num + 1, ro[it][v[city][it] + 1]);
		} else {
			dfs(it, pr + p[it], num + 1, ro[it][v[city][it] + 1]);
		}
	}
} 

int main() {
//	freopen("route.in", "r", stdin);
//	freopen("route.out", "w", stdout);
	cin >> A >> B >> n;
	for (int i = 1; i <= n; i ++) {
		cin >> p[i] >> m[i];
		int x;
		for (int j = 0; j < m[i]; j ++) {
			scanf("%d", &x);
			ro[i].push_back(x);
			map[x].push_back(i);
			v[x][i] = j;
		}
	}
	for (int i = 0; i < map[A].size(); i ++) {
		int it = map[A][i];
		if (ro[it][m[it] - 1] == A) continue;
		dfs(it, p[it], 1, ro[it][v[A][it] + 1]);
	}
	if (flag2) 
		cout << ans1 << ' ' << ans2;
	else 
		cout << "-1 -1";
	return 0;
}
2024/10/19 15:50
加载中...