除了顶点1输出全为0,为什么啊
查看原帖
除了顶点1输出全为0,为什么啊
519936
Lqz114514楼主2022/9/12 20:43

下面是代码XD

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
const int M=4e6+5;
int head[N];//head指向当前一个点的最后一个出边在e数组中的下标 
struct edge{
	int u;//起始点 
	int v;//终点 
	int ne;//指向点u的上一条出边 
};
int idx;
edge e[M];
void add(int a,int b)
{
	e[++idx].u=a;
	e[idx].v=b;
	e[idx].ne=head[e[idx].u];
	head[e[idx].u]=idx;
}
int line[M];//line[i]存储的是顶点1到i的路径数
int dis[M];//dis[i]储存的是顶点1到i的最短路径长度
queue <int> q;
void bfs()
{
	while(!q.empty())
	{
		int x=q.front();
		q.pop();
		int i=head[x];
		while(i)
		{
			int t=e[i].v;
			if(dis[t]<dis[x]+1)
			{
				dis[t]=dis[x]+1;
				q.push(t);
			} 
			if(dis[x]+1==dis[t]) line[t]+=line[x];
			i=e[i].ne;
		}
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int u,v;
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	memset(dis,0x3f3f3f3f,sizeof(dis));
	memset(head,0,sizeof(head));
	memset(line,0,sizeof(line));
	dis[1]=0;	line[1]=1;
	q.push(1);
	bfs();
	for(int i=0;i<n;i++)
	{
		cout<<line[i]<<endl;
	}
	return 0;
}
2022/9/12 20:43
加载中...