ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1499:最短路计数

2022-07-18 08:32:10  阅读:134  来源: 互联网

标签:输出 int 短路 ans 计数 顶点 1499 include


【题目描述】

给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1∼N。问从顶点 1 开始,到其他每个点的最短路有几条。

【输入】

给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1∼N。问从顶点 1 开始,到其他每个点的最短路有几条。

【输出】

输出 N 行,每行一个非负整数,第 i 行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可。如果无法到达顶点 i 则输出 0。

【输入样例】

5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5

【输出样例】

1
1
1
2
4

【提示】

样例解释

1 到 5 的最短路有 4 条,分别为 2 条 1→2→4→5 和 2 条 1→3→4→5(由于 4→5 的边有 2 条)。

数据范围:

对于 20% 的数据,N≤100;

对于 60% 的数据,N≤1000;

对于 100% 的数据,1≤N≤100000,0≤M≤200000。

【代码】

 

登录CSDN复制
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
inline int read()
{
	char ch=getchar(); 
	int x=0,f=1;
	while((ch>'9'||ch<'0')&&ch!='-')
		ch=getchar();
	if(ch=='-')
	{
		f=-1;
		ch=getchar();
	}
	while('0'<=ch&&ch<='9')
	{
    	x=x*10+ch-'0';
    	ch=getchar();
	}
	return x*f;
}
int mod=100003;
int n,m,x,y,tot=0;
const int N=1000005,M=4000005;
int head[N],to[M],nxt[M],d[N],ans[N];
bool p[N];
priority_queue< pair< int,int > > q;

void add(int x,int y)
{
	to[++tot]=y;
	nxt[tot]=head[x];
	head[x]=tot;
}
int main()
{
	n=read();m=read();
	for(int i=1;i<=m;i++)
	{
		x=read();y=read();
		add(x,y);
		add(y,x);
	}
	for(int i=1;i<=n;i++)
	{
		d[i]=1e9;p[i]=0;
	}
	d[1]=0;ans[1]=1;
	q.push(make_pair(0,1));
	while(q.size())
	{
		x=q.top().second;
		q.pop();
		if(p[x])	continue;
		p[x]=1;
		for(int i=head[x];i;i=nxt[i])
		{
			y=to[i];
			if(d[y]>d[x]+1)
			{
				d[y]=d[x]+1;
				ans[y]=ans[x];
				q.push(make_pair(-d[y],y));
			}
			else if(d[y]==d[x]+1)
			{
				ans[y]+=ans[x];
				ans[y]%=mod;
			}
		}
	}
	for(int i=1;i<=n;i++)
		printf("%d\n",ans[i]);
	return 0;
}

 

标签:输出,int,短路,ans,计数,顶点,1499,include
来源: https://www.cnblogs.com/sk2021035/p/16489133.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有