样例没问题,自己弄了很多数据也没找到问题,只有20分,麻烦大佬帮忙看看
查看原帖
样例没问题,自己弄了很多数据也没找到问题,只有20分,麻烦大佬帮忙看看
393699
HXR123楼主2023/8/10 10:22

代码如下,实在是找不到问题了

#include<bits/stdc++.h>
using namespace std;
int n,m,s,h[501000],zw[501000];
long long w[501000];
bool p[1010001];
struct P{long long a,b;};
vector<P>t[501000];
int main()
{
	memset(w,100,sizeof(w));
	long long u=w[0];
//	cout<<u<<"\n\n\n\n";
//	for(int i=1;i<=n;i++)w[i]=u;
	scanf("%d%d%d",&n,&m,&s);
	w[s]=0;p[s]=1;
	for(int i=1;i<=m;i++)
	{
		int x,y;
		long long z;
		scanf("%d%d%lld",&x,&y,&z);
		t[x].push_back({y,z});
//		t[y].push_back({x,z});
		h[x]++;
	}
//	cout<<"\n";
	int l=0;
//	for(int j=1;j<=n;j++){for(int i=0;i<h[j];i++){cout<<t[j][i].b<<" ";}cout<<"\n";}
	for(int j=1;j<=n;j++)
	{
		for(int i=0;i<h[s];i++)
		{
			w[t[s][i].a]=min(w[t[s][i].a],w[s]+t[s][i].b);
			if(!p[t[s][i].a])
			{
				l++;
				p[t[s][i].a]=1;
				zw[l]=t[s][i].a;
			}
		}
		s=zw[j];
	}
	int ww=pow(2,31)-1;
	for(int o=1;o<=n;o++){if(w[o]==u)printf("%d ",ww);else printf("%lld ",w[o]);}
	return 0;
}
2023/8/10 10:22
加载中...