求助,样例输出0,玄关
查看原帖
求助,样例输出0,玄关
1125129
WJX120423楼主2024/5/5 10:03
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000+10;
int n,m;
bool vis[maxn];
int dis[maxn],cnt[maxn];
struct node{
	int to,w;
	node(int t,int ww){
		to=t; w=ww;
	}
};
vector<node> vec[maxn*2];
struct qnode{
	int id,d;
	qnode(int i,int x){
		id=i; d=x;
	}
	friend bool operator <(qnode n1,qnode n2){
		return n1.d>n2.d;
	}
};
priority_queue<qnode> q;
void dij(int s){
	memset(dis,INT_MAX,sizeof(dis));
	memset(cnt,0,sizeof(cnt));
	q.push((qnode){s,0}); cnt[s]++; dis[s]=0;
	while(!q.empty()){
		int x=q.top().id; q.pop();
		for(int i=0;i<vec[x].size();i++){
			int y=vec[x][i].to;
			if(dis[y]>dis[x]+vec[x][i].w){
				dis[y]=dis[x]+vec[x][i].w;
				cnt[y]=1;
				q.push((qnode){y,dis[y]});
			}
			else if(dis[y]==dis[x]+vec[x][i].w) cnt[y]++;
		}
	}
}
int main(){		
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		vec[u].push_back(node(v,1));
	}
	dij(1);
	for(int i=1;i<=n;i++) cout<<cnt[i]<<endl;
	return 0;
}
2024/5/5 10:03
加载中...