悬关 spfa黄题
查看原帖
悬关 spfa黄题
226167
呆呆的她啊楼主2023/11/29 13:50

#4:Wrong Answer.wrong answer On line 99954 column 1, read 0, expected 7.

是超时还是咋了这题一定要用链式向前星吗

#5:Wrong Answer.wrong answer On line 128 column 1, read 0, expected 6.

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
const int n1=2000005;
int d[n1],vis[n1];
int ans[n1];
struct node{	
	int ne;
};
vector<node>e[2000005];
queue<int>q;
inline int read()
{
	int s=0;int w=1;
	 char ch=getchar();
	while(ch>'9'||ch<'0')
	{
		if(ch=='-')w*=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{ 
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
	
}
void spfa()
{ 
	while(q.size())
	{ 
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(auto i:e[u])
		{  
			int v=i.ne;
		if(d[v]>d[u]+1)
		{
			d[v]=d[u]+1;
			ans[v]=ans[u];
			if(!vis[v]){q.push(v);vis[v]=1;}
		}
			else if(d[v]==d[u]+1){
				ans[v]+=ans[u];
				ans[v]=ans[v]%100003;
			}	
		}
	}
	return ;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u=read();
		int v=read();
		e[u].push_back((node){v});
		e[v].push_back((node){u});
	} 
for(int i=1;i<=n;i++)
{
	d[i]=0x3f;
	vis[i]=0;
}
   ans[1]=1;
	d[1]=0;
	q.push(1);
	vis[1]=1;
	spfa();
	for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
	return 0;
}
2023/11/29 13:50
加载中...