社区讨论
SPFA做wa了最后五个点?本人不是妹子(滑稽
P3385【模板】负环参与者 6已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mi6tgu5p
- 此快照首次捕获于
- 2025/11/20 10:33 4 个月前
- 此快照最后确认于
- 2025/11/20 10:33 4 个月前
Rt,改数据A了的,现在换做SPFA过不了了
核心
CPPbool 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 条回复,欢迎继续交流。
正在加载回复...