求条
查看原帖
求条
1285683
lz_fruit楼主2025/1/20 11:46

评测记录,只得了60分,不知知道哪里错了......

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

const int N=1000001;
bool P[N];
int n,m,dist[N],ans[N];
struct Edge{
	int v,w;
};

vector<Edge> G[N];
priority_queue<Edge> Q;

bool operator<(Edge a,Edge b)
{
	return a.w>b.w;
}

void dij(int a)
{
	ans[1]=1;
	memset(dist,0x3f,sizeof(dist));
	Q.push((Edge){1,0});
	dist[1]=0;
	while(!Q.empty())
	{
		Edge x=Q.top();Q.pop();
		if(P[x.v]==1) continue;
		P[x.v]=1;
		for(int i=0;i<G[x.v].size();i++)
		{
			if(dist[G[x.v][i].v]>dist[x.v]+G[x.v][i].w)
			{
				dist[G[x.v][i].v]=dist[x.v]+G[x.v][i].w;
				ans[G[x.v][i].v]=ans[x.v];
				Q.push((Edge){G[x.v][i].v,dist[G[x.v][i].v]});
			}
			else if(dist[G[x.v][i].v]==dist[x.v]+G[x.v][i].w)
			{
				ans[G[x.v][i].v]+=ans[x.v];
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		G[x].push_back({y,1});
		G[y].push_back({x,1});
	}
	dij(1);
	for(int i=1;i<=n;i++)
	cout<<ans[i]<<endl; 
}
2025/1/20 11:46
加载中...