萌新92pts, WA on #9 玄关求助
查看原帖
萌新92pts, WA on #9 玄关求助
796919
hyy114514楼主2023/10/8 18:26

RT


挺离谱的,long long试过了不行,改了数据范围也不行

错误提示:Wrong Answer.wrong answer On line 1 column 3, read 4, expected 6.


code:

#include <bits/stdc++.h>
#define inf (1 << 31) - 1
//#define int long long

using namespace std;

const int maxn = 4e6 + 10;
const int N = 2005;

int c[N][N];
int dis[N], sum[N], n, m;
bool vis[N];
priority_queue<pair<int, int>> q;
int head[N], nxt[maxn], to[maxn], val[maxn];
int ans, cnt;

inline void add_edge(int u, int v, int w) {
	to[++cnt] = v;
	nxt[cnt] = head[u];
	val[cnt] = w;
	head[u] = cnt;
}

inline void init() {
//	memset(dis, inf, sizeof dis);
	for (int i = 2; i <= n; i++) {
		dis[i] = inf;
	}
	sum[1] = 1;
	q.push(make_pair(0, 1));
}

inline void dijkstra() {
	while (!q.empty()) {
		int x = q.top().second;
		q.pop();
		if (vis[x]) {
			continue;
		}
		vis[x] = 1;
		for (int i = head[x]; i != 0; i = nxt[i]) {
			int y = to[i];
			int z = val[i];
			if (dis[y] > dis[x] + z) {
				dis[y] = dis[x] + z;
				sum[y] = 0;
				q.push(make_pair(-dis[y], y));
			}
			if (dis[y] == dis[x] + z) {
				sum[y] += sum[x];
			}
		}
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		if (!c[u][v]) {
			add_edge(u, v, w);
			c[u][v] = 1;
		} if (c[u][v]) {
			for (int i = head[u]; i != 0; i = nxt[i]) {
				if (nxt[i] == v) {
					val[i] = min(val[i], w);
					break;
				}
			}
		}
	}
	init();
	dijkstra();
	if (dis[n] == inf) {
		cout << "No answer" << endl;
		return 0;
	}
	cout << dis[n] << " " << sum[n] << endl;
	return 0;
}



正确输出:

3 6

代码输出:

3 4
2023/10/8 18:26
加载中...