Dijk 0pts 求调
查看原帖
Dijk 0pts 求调
1192586
DemonPlayer楼主2024/12/14 20:45

rt

#include<bits/stdc++.h>
using namespace std;

int n,m;
int u,v;
int num[1000050];
vector<int> a[1000050];
long long dist[1000050];
bool vis[1000050];

struct pts{
	int idx;
	long long dist;
	bool operator <(const pts& x)const{
		return dist>x.dist;
	}
};

void dijk(int x){
	memset(dist,0x3f,sizeof(dist));
	dist[x]=0;
	priority_queue<pts> q;
	q.push({x,0});
	pts t;
	while(q.size()){
		t=q.top();
		q.pop();
		u=t.idx;
		if(vis[u]){
			continue;
		}
		vis[u]=1;
		for(int i=0;i<a[u].size();i++){
			v=a[u][i];
			if(dist[v]==dist[u]+1){
				num[v]++;
				num[v]%=100003;
			}
			if(dist[v]>dist[u]+1){
				dist[v]=dist[u]+1;
				num[v]=1;
				q.push({v,dist[v]});
			}
		}
	}
	return;
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		if(u==v){
			continue;
		}
		a[u].push_back(v);
		a[v].push_back(u);
	}
	dijk(1);
	for(int i=1;i<=n;i++){
		cout<<num[i]<<'\n';
	}
	return 0;
}
2024/12/14 20:45
加载中...