社区讨论

SPFA做wa了最后五个点?本人不是妹子(滑稽

P3385【模板】负环参与者 6已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mi6tgu5p
此快照首次捕获于
2025/11/20 10:33
4 个月前
此快照最后确认于
2025/11/20 10:33
4 个月前
查看原帖
Rt,改数据A了的,现在换做SPFA过不了了
核心
CPP
bool SPFA(int s){
	h = 1,tail = 0;
	memset(d,127,sizeof(d));
	d[s] = 0;
	Q[++tail] = s;
	inq[s] = 1;
	while(h <= tail){
		int u = Q[h];h++;inq[u] = 0;
		for(int i = head[u];i;i = E[i].nxt){
			int v = E[i].v;
			int dis = E[i].dis;
			if(d[u] + dis < d[v]){
				d[v] = d[u] + dis;
				if(!inq[v]){
					Q[++tail] = v;
					inq[v] = 1;
					nin[v]++;
					if(nin[v] > num + 1)return false;
					}
				}
			}
		}
	return true;
	}
全部Code
CPP
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
int RD(){
    int out = 0,flag = 1;char c = getchar();
    while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
    while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
    return flag * out;
    }
const int maxn = 10019,INF = 1e9;
int num,nume,T,nr;
int head[maxn];
struct Node{
    int v,dis,nxt;
    }E[maxn << 3];
void add(int u,int v,int dis){
    E[++nume].nxt = head[u];
    E[nume].v = v;
    E[nume].dis = dis;
    head[u] = nume;
    }
int Q[maxn],h,tail;
bool inq[maxn];
int nin[maxn];
int d[maxn];
bool SPFA(int s){
	h = 1,tail = 0;
	memset(d,127,sizeof(d));
	d[s] = 0;
	Q[++tail] = s;
	inq[s] = 1;
	while(h <= tail){
		int u = Q[h];h++;inq[u] = 0;
		for(int i = head[u];i;i = E[i].nxt){
			int v = E[i].v;
			int dis = E[i].dis;
			if(d[u] + dis < d[v]){
				d[v] = d[u] + dis;
				if(!inq[v]){
					Q[++tail] = v;
					inq[v] = 1;
					nin[v]++;
					if(nin[v] > num + 1)return false;
					}
				}
			}
		}
	return true;
	}
int main(){
	T = RD();
	while(T--){
		memset(head,0,sizeof(head));
		memset(nin,0,sizeof(nin));
		nume = 0;
		num = RD();nr = RD();
		int u,v,dis;
		for(int i = 1;i <= nr;i++){
			u = RD();v = RD();dis = RD();
			if(dis < 0)add(u,v,dis);
			else{
				add(u,v,dis);add(v,u,dis);
				}
			}
		if(!SPFA(1))printf("YE5\n");
		else printf("N0\n");
		}
	return 0;
	}

回复

9 条回复,欢迎继续交流。

正在加载回复...