第一个点下载后输出是YES吗???????调了加一关注
查看原帖
第一个点下载后输出是YES吗???????调了加一关注
910357
songzhihan2010楼主2023/8/3 16:43

感觉没有问题,但是只有10分,下完数据直接懵了

#include<bits/stdc++.h>
using namespace std;
int u,v,w;
int n,m;
int dis[50001];
vector <int> p[50001];
vector <int> lu[50001];
int q[50001];
int b[50001];
int cnt[50001];
int head,tail;
int main() {
	scanf("%d%d",&n,&m);
	for (int i=1; i<=m; i++) {
		scanf("%d%d%d",&u,&v,&w);
		p[v].push_back(u);
		lu[v].push_back(w);
	}
	for (int i=1; i<=n; i++) {
		dis[i]=100000;
		p[0].push_back(i);
		lu[0].push_back(0);
	}
	q[1]=0;
	head=0;
	tail=1;
	b[0]=1;
	dis[0]=0;
	while(head<tail) {
		head++;
		b[q[head]]=0;
		for (int i=0; i<p[q[head]].size(); i++) {
			if(dis[p[q[head]][i]]>dis[q[head]]+lu[q[head]][i]) {
				dis[p[q[head]][i]]=dis[q[head]]+lu[q[head]][i];
				cnt[p[q[head]][i]]=cnt[q[head]]+1;
				if(cnt[b[p[q[head]][i]]]==n) {
					printf("NO");
					return 0;
				}
				if(b[p[q[head]][i]]==0) {
					b[p[q[head]][i]]=1;
					q[++tail]=p[q[head]][i];
				}
			}
		}
	}
	for (int i=1; i<=n; i++) {
		printf("%d ",dis[i]);
	}
}
2023/8/3 16:43
加载中...