社区讨论
求助一个小问题
P3385【模板】负环参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjkwrtk
- 此快照首次捕获于
- 2025/11/04 04:14 4 个月前
- 此快照最后确认于
- 2025/11/04 04:14 4 个月前
rt,是这样的,本蒟蒻将spfa放在单独的函数中就AC了,结果放到主函数中就Subtask 0全WA,有哪位大佬能告诉我为什么吗?
AC代码:
CPP#include <bits/stdc++.h>
using namespace std;
vector <pair<int,int> > edge[5005];
int n,m;
void spfa(){
int dist[5005]={0},vis[5005]={0},cnt[5005]={0};
queue <int> q;
q.push(1);
memset(dist,0x3f3f3f3f,sizeof(dist));
vis[1]=1,dist[1]=0;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i].first,w=edge[u][i].second;
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
if(!vis[v]){
cnt[v]++;
if(cnt[v]>=n){
cout<<"YES"<<'\n';
return;
}
vis[v]=1;
q.push(v);
}
}
}
}
cout<<"NO"<<'\n';
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){
edge[i].clear();
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
edge[u].push_back(make_pair(v,w));
if(w>=0){
edge[v].push_back(make_pair(u,w));
}
}
spfa();
}
}
WA代码:
CPP#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
bool flag=false;
int dist[5005]={0},vis[5005]={0},cnt[5005]={0};
vector <pair<int,int> > edge[5005];
for(int i=1;i<=5005;i++){
edge[i].clear();
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
edge[u].push_back(make_pair(v,w));
if(w>=0){
edge[v].push_back(make_pair(u,w));
}
}
queue <int> q;
q.push(1);
memset(dist,0x3f3f3f3f,sizeof(dist));
vis[1]=1,dist[1]=0;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=0;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i].first,w=edge[u][i].second;
if(dist[v]>dist[u]+w){
dist[v]=dist[u]+w;
if(!vis[v]){
cnt[v]++;
if(cnt[v]>=n){
cout<<"YES"<<'\n';
flag=true;
break;
}
vis[v]=1;
q.push(v);
}
}
}
}
if(!flag){
cout<<"NO"<<'\n';
}
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...