T最后一个点,还有可以优化的地方么
查看原帖
T最后一个点,还有可以优化的地方么
94772
Donald_Ducka楼主2024/4/2 14:24
#include <bits/stdc++.h>
using namespace std;
const int N = 4e6 + 10;
const int M = 100003;
int h[N], e[N],  ne[N], idx;
int dis[N];
bool vis[N];
int cnt[N];
typedef pair<int, int> PII;

priority_queue<PII, vector<PII>, greater<PII>> q;

int n, m, s;

void add(int a, int b, int c) {
	if (a != b)
		e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void dijkstra() {
	dis[1] = 0;
	cnt[1] = 1;
	q.push({0, 1});
	while (q.size()) {
		auto t = q.top();
		q.pop();
		int ver = t.second, distance = t.first;

		if (vis[ver])
			continue;
		//cout << ver << " " << cnt[ver] << endl;
		vis[ver] = 1;
		for (int i = h[ver]; i != -1; i = ne[i]) {
			int j = e[i];

			if (dis[j] == dis[ver] + 1) {
				cnt[j] += cnt[ver];
				cnt[j] %= M;
				//	q.push({dis[j], j});
			}
			if (dis[j] > dis[ver] + 1) {
				dis[j] = dis[ver] + 1;
				cnt[j] += cnt[ver];
				cnt[j] %= M;
				q.push({dis[j], j});
			}
		}
	}
}

int main() {
	cin >> n >> m ;
	memset(h, -1, sizeof(h));
	memset(dis, 9998, sizeof(dis));
	for (int i = 1; i <= m; i++) {
		int ui, vi;
		cin >> ui >> vi ;
		add(ui, vi, 1);
		add(vi, ui, 1);
	}
	dijkstra();
	for (int i = 1; i <= n; i++)
		if (cnt[i])
			cout << cnt[i] % M << endl;
		else
			cout << 0 << endl;
}
2024/4/2 14:24
加载中...