被卡了过不去
查看原帖
被卡了过不去
482610
Mortidesperatslav楼主2023/10/19 19:25
#include<bits/stdc++.h>
using namespace std;
int n, m, dis[30004], s, t;
queue<int> q;
bool vis[30004];
vector<int> G[30004];
int main() {
	scanf("%d%d",&n,&m);
	for (int i = 0, b, p; i < m; i++) {
		scanf("%d%d",&b,&p);
		if (i == 0) s = b;
		if (i == 1) t = b;
		G[b].push_back(p);
	}
	memset(dis, -1, sizeof(dis));
	dis[s] = 0;
	vis[t] = 1;
	q.push(s);
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		vis[u] = 0;
		for (int v : G[u]) {
			for (int i = 1; u - i * v >= 0 || u + i * v < n; i++) {
				int a = u - i * v, c = u + i * v;
				if (a >= 0 && (dis[a] > dis[u] + i || dis[a] == -1)) {
					dis[a] = dis[u] + i;
					if (!vis[a]) q.push(a), vis[a] = 1;
				}
				if (c < n && (dis[c] > dis[u] + i || dis[c] == -1)) {
					dis[c] = dis[u] + i;
					if (!vis[c]) q.push(c), vis[c] = 1;
				}
			}
		}
	}
	cout << dis[t];
}

95 分。

2023/10/19 19:25
加载中...