社区讨论

求助一个小问题

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 条回复,欢迎继续交流。

正在加载回复...