呜呜呜,打了几分钟模板,大眼瞪小眼半个小时wa一个不懂怎么办
查看原帖
呜呜呜,打了几分钟模板,大眼瞪小眼半个小时wa一个不懂怎么办
694728
isomer__1楼主2023/3/27 16:35

wa了一个,不知道怎么回事,救救了

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int inf=0x3f3f3f3f;
long long h[N<<1],d[N<<1],idx;
bool vis[N];
struct edge
{
	int to,next,w;
}e[N<<1];

void add(int a,int b,int w)
{
	e[idx].to=b;
	e[idx].w=w;
	e[idx].next=h[a];
	h[a]=idx++;
}
long long cnt[N<<1];
int n,m;
bool spfa()
{
	queue<int>q;
	d[1]=0;
	for(int i=1;i<=n;i++){
		q.push(i);
		vis[i]=1;
	}
	while(q.size()){
		int c=q.front();
		q.pop();
		vis[c]=0;
		for(int i=h[c];~i;i=e[i].next){
			auto j=e[i];
			if(d[j.to]>d[c]+j.w){
				d[j.to]=d[c]+j.w;
				cnt[j.to]=cnt[c]+1;
				if(cnt[j.to]>=n)return 1;
				if(!vis[j.to]){
					q.push(j.to);
					vis[j.to]=1;
					
				}
			}
		}
	}
	return 0;
}



void solve()
{
    int t;
    cin>>t;
    while(t--){
    	cin>>n>>m;
    	memset(h,-1,sizeof(h));
    	memset(d,inf,sizeof d);
    	memset(vis,0,sizeof vis);
    	memset(cnt,0,sizeof cnt);
    	while(m--){
    		int a,b,w;
    		cin>>a>>b>>w;
    		if(w>=0){
    			add(a,b,w);
    			add(b,a,w);
    		}
    		else add(a,b,w);
    	}
    	if(spfa())cout<<"YES"<<endl;
    	else cout<<"NO"<<endl;
    }
}

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    solve();

    return 0;
}
2023/3/27 16:35
加载中...