本人刚学1秒的OI,SPFA本地下载样例AC,但评测全RE,求助QwQ
查看原帖
本人刚学1秒的OI,SPFA本地下载样例AC,但评测全RE,求助QwQ
549846
dpACerFXing楼主2023/8/13 10:56
# include<iostream>
# include<algorithm>
# include<cmath>
# include<iomanip>
# include<queue>
# include<cstring>
# define endl "\n"
using namespace std;
const int maxn=100001, maxm=100001, inf=0x7fffffff;
struct Node{
	int u, v, w, next;
}edge[maxm*2];
int t, n, m;
int cnt=0, head[maxn], d[maxn], inqueue_num[maxn], vis[maxn];
queue<int> q;
int add(int u, int v, int w) {
	cnt++;
	edge[cnt].u=u, edge[cnt].v=v, edge[cnt].w=w, edge[cnt].next=head[u];
	head[u]=cnt;
}
bool spfa() {
	for(int i=1; i<=n; i++) d[i]=inf;
	d[1]=0; vis[1]=1; q.push(1); inqueue_num[1]++;
	while(!q.empty()) {
		int u=q.front(); q.pop(); vis[u]=0;
		for(int i=head[u]; i; i=edge[i].next) {
			int v=edge[i].v, w=edge[i].w;
			if(d[v]>d[u]+w) { // 松弛
				d[v]=d[u]+w;
				if(!vis[v]) {
					vis[v]=1; q.push(v); inqueue_num[v]++;
					if(inqueue_num[v]>n) return false;
				}				
			}
		}
	}
	return true;
}
int main() {
	cin >> t;
	while(t--) {
		cnt=0;
		memset(head, 0, sizeof(head));
		memset(d, 0, sizeof(d));
		memset(inqueue_num, 0, sizeof(inqueue_num));
		memset(vis, 0, sizeof(vis));
		while(!q.empty()) q.pop();
		cin >> n >> m;
		while(m--) {
			int u, v, w;
			cin >> u >> v >> w;
			add(u, v, w);
		}
		if(!spfa()) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

可以给两个关注qwq

2023/8/13 10:56
加载中...