数据都过了,为啥还是ac哇,我不明白呀
查看原帖
数据都过了,为啥还是ac哇,我不明白呀
1120844
haluyaoac楼主2024/9/4 13:48
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;

vector<int> node[123456][2];
int n, dis[123456], clrr[1234], path[123456][2];

void bfsn() {
	queue<int> q;
	q.push(n);
	dis[n] = 0;
	while (!q.empty()) {
		int f = q.front(); q.pop();
		for (int i = 0; i < node[f][0].size(); i++) {
			if (dis[node[f][0][i]] != -1)continue;
			dis[node[f][0][i]] = dis[f] + 1;
			q.push(node[f][0][i]);
		}
	}
}

void bfs1() {
	queue<int> q;
	q.push(1);
	path[1][0] = 0;
	while (!q.empty()) {
		queue<int> p = q;
		while (!q.empty()) {
			int f = q.front(); q.pop();
			for (int i = 0; i < node[f][0].size(); i++) {
				if (dis[node[f][0][i]] != dis[f] - 1)continue;
				if (node[f][1][i] < clrr[dis[node[f][0][i]]])clrr[dis[node[f][0][i]]] = node[f][1][i];
			}
		}
		while (!p.empty()) {
			int f = p.front(); p.pop();
			for (int i = 0; i < node[f][0].size(); i++) {
				if (dis[node[f][0][i]] != dis[f] - 1)continue;
				if (node[f][1][i] == clrr[dis[node[f][0][i]]]) {
					q.push(node[f][0][i]);
					path[node[f][0][i]][0] = f;
					path[node[f][0][i]][1] = clrr[dis[node[f][0][i]]];
				}
			}
		}
	}
}

int main() {
	int m;
	while (scanf("%d%d", &n, &m) == 2) {
		memset(dis, -1, sizeof(dis));
		memset(path, 0, sizeof(path));
		while (m--) {
			int u, v, c;
			cin >> u >> v >> c;
			node[u][0].push_back(v);
			node[u][1].push_back(c);
			node[v][0].push_back(u);
			node[v][1].push_back(c);
		}
		bfsn();
		for (int i = 0; i < dis[1]; i++) {
			clrr[i] = 1000000000;
		}
		bfs1();
		for (int i = 1; i <= dis[1]; i++) {
			node[i][0].clear();
			node[i][1].clear();
		}
		int step[123456];
		int k = n;
		for (int i = dis[1]; i >= 1; i--) {
			step[i] = path[k][1];
			k = path[k][0];
		}
		cout << dis[1] << endl;
		for (int i = 1; i < dis[1]; i++) {
			cout << step[i] << ' ';
		}
		cout << step[dis[1]] << endl;
	}
	return 0;
}

200000这些都过了,为啥还是wc啊,求求了

2024/9/4 13:48
加载中...