求助,有毒的全re
查看原帖
求助,有毒的全re
366746
烛木楼主2020/8/29 21:15

样例过,下载第一个测试点过,但是全re。。。

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int tot,n,m,s,head,tail,dis[10002],team[10002];
bool vis[10002];
struct qxx
{
	int first,next,go,value;
}p[500002];
int star(int a,int b,int c)
{
	p[++tot].next=p[a].first;
	p[a].first=tot;
	p[tot].go=b;
	p[tot].value=c;
}
void spfa(int a)
{
	memset(dis,0x3f,sizeof(dis));//最短距离初始化; 
	memset(vis,true,sizeof(vis));//判断是否入过队; 
	dis[a]=0;//初始化起点距离0; 
	team[tail]=a;//将初始结点入队; 
	vis[a]=false; 
	while(head<=tail) 
	{
		int u=team[head++];//提出队首元素; 
		for(int i=p[u].first;i!=0;i=p[i].next)//遍历; 
		{
			int z=p[i].go;
			if(dis[u]+p[i].value<dis[z])//判断是否更新最短距离; 
			{
				dis[z]=dis[u]+p[i].value;
				  //cout<<dis[z]<<endl;
				if(vis[z]==true)//将遍历到的结点入队; 
				{
					team[++tail]=z;
					vis[z]=false;//防止二次入队; 
				}
			}
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		star(x,y,z);
	}
	spfa(s);
	for(int i=1;i<=n;i++)
	{
		if(dis[i]==0x3f)
		cout<<(1<<31)-1<<" ";
		else
		cout<<dis[i]<<" ";
	}
	return 0;
}
2020/8/29 21:15
加载中...