求救!!1,3,4,5ac,其他全tle
查看原帖
求救!!1,3,4,5ac,其他全tle
478080
ysydreamer楼主2021/10/8 20:52
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000004;

int head[MAXN];
int ans[MAXN];
bool vis[MAXN];
int n,m,s,cnt;
struct node
{
	int to,nxt,wei;
}node[MAXN];

int read()
{
	int a=0,x=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-') x=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		a=(a<<1)+(a<<3)+ch-48;
		ch=getchar();
	}
	return a*x;
}

void write(int a)
{
    if(a<0) putchar('-'),a=-a;
    if(a>9) write(a/10);
    putchar(a%10+48);
}

void addedge(int nodea,int nodeb,int howlong)
{
	node[++cnt].to = nodeb;
	node[cnt].wei = howlong;
	node[cnt].nxt = head[nodea];
	head[nodea] = cnt;
}

int main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	cin >> n >> m >> s;
	for(int i=1;i<=m;i++)	ans[i] = 1e10;
	ans[s] = 0;
	for(int i=1;i<=m;i++)
	{
		int cinsafxd,cinsbfxd,cinscfxd;
		cinsafxd = read();
		cinsbfxd = read();
		cinscfxd = read();
		addedge(cinsafxd,cinsbfxd,cinscfxd);
	}
	int pos=s;
	while(vis[pos] == 0)
	{ 
		long long mn = 1e10;
		vis[pos] = 1;
		for(int i=head[pos];i!=0;i=node[i].nxt)
			if(!vis[node[i].to]&&ans[node[i].to] > ans[pos]+node[i].wei)
				ans[node[i].to] = ans[pos]+node[i].wei;
		for(int i=1;i<=m;i++)
			if(ans[i]<mn && vis[i]==0)
			{
				mn = ans[i];
				pos = i;
			}
	}
	for(int i=1;i<=n;i++)
	{
		write(ans[i]);
		printf(" ");
	}	
	return 0;
}

好像死循环了,但样例又过了,造了几组数据也过了,那位神犇可以帮帮忙

2021/10/8 20:52
加载中...