求助点6RE
查看原帖
求助点6RE
454444
StenvenPig楼主2025/8/4 15:05
#include<bits/stdc++.h>
using namespace std;
long long n,m,dis[4000001],v[4000001];
struct st{
	long long id,w;
	bool operator()(st s1,st s2){
		return s1.w>s2.w;
	}
};
vector<st> a[4000001];
void disa(int star){
	memset(dis,0x3f,sizeof dis);
	memset(v,0,sizeof v);
	priority_queue<st,vector<st>,st> q;
	q.push({star,0});
	while(q.size()){
		int k=0;
		st nd=q.top();
		q.pop();
		if(v[nd.id]==1) continue;
		v[nd.id]=1;
		dis[nd.id]=nd.w;
		for(auto j:a[nd.id]){
			if(!v[j.id]) q.push({j.id,j.w+nd.w});
		}
	}
}
long long f[400010]={0,1};
long long get(int x){
	if(f[x]) return f[x];
	long long tot=0;
	for(auto i:a[x]){
		if(dis[i.id]+1==dis[x]){
			tot+=get(i.id);
		}
	}
	return f[x]=tot%100003;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		a[u].push_back({v,1});
		a[v].push_back({u,1});
		
	}
	disa(1);
	for(int i=1;i<=n;i++){
		printf("%d\n",get(i));
	}
	return 0;
}
2025/8/4 15:05
加载中...