社区讨论

bfs 0WA

P1144最短路计数参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@m2db345r
此快照首次捕获于
2024/10/17 20:57
去年
此快照最后确认于
2025/11/04 16:58
4 个月前
查看原帖
rt.
CPP
#include <iostream>
#include <cstring>
#include <queue>
#include <map>
#define int long long
using namespace std;
const int N = 4e6 + 5, mod = 100003;
int n, m;
int cnt[N];
int d[N], vis[N], minn[N];
struct poi{
	int v, w, cnt;
};
map<pair<int, int>, int> mp;
queue<poi> q;
vector<poi> g[N];
inline void bfs()
{
	memset(minn, 0x3f, sizeof(minn));
	vis[1] = 1;
	q.push({1, 1, 1});
	while(!q.empty()){
		poi p = q.front();
		q.pop();
		for(int i = 0; i < g[p.v].size(); i++){
			int v = g[p.v][i].v, w = g[p.v][i].w;
			if((vis[v] < cnt[v] && p.cnt + 1 == minn[v]) || minn[v] == 4557430888798830399){
				q.push({v, p.w * mp[make_pair(p.v, v)], p.cnt + 1});
				vis[v]++;
				d[v] += p.w * mp[make_pair(p.v, v)] % mod;
				minn[v] = p.cnt + 1;
			}
		}
	}
}
signed main()
{
//	freopen("T2.in", "r", stdin);
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int u, v;
		cin >> u >> v;
		if(u == v) continue;
		if(!mp[make_pair(u, v)]) g[u].push_back({v, 1, 0}), g[v].push_back({u, 1, 0});
		mp[make_pair(u, v)]++;
		cnt[v]++;
	}
	d[1] = 1;
	bfs();
	for(int i = 1; i <= n; i++) cout << d[i] << "\n";
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...