求助!!
  • 板块学术版
  • 楼主woshiguage
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/6/1 21:13
  • 上次更新2024/6/1 23:09:27
查看原帖
求助!!
680101
woshiguage楼主2024/6/1 21:13
#include <bits/stdc++.h>
using namespace std;
vector<int> v[2005], c[2005];
int dis[2005],kis[2005];
bool vis[2005];
signed main(){
	int n, m, s ,t; cin>>t;
	while(t--){
	    for(int i=0;i<=2000;i++)v[i].clear();
	    scanf("%d%d", &n, &m);
	    s=1;
	for (int i = 0; i < m; i++){
		int a, b, cost; scanf("%d%d%d", &a, &b, &cost);
		if(cost>=0){v[a].push_back(b); c[a].push_back(cost);v[b].push_back(a); c[b].push_back(cost);}
		else {v[a].push_back(b);c[a].push_back(cost);}
	}
	queue<int> q;
	memset(kis,0,sizeof(kis));
	memset(vis,0,sizeof(vis));
	q.push(s);
	kis[s]=0;
	for(int i=1;i<=2000;i++)dis[i]=2147483647;
	dis[s]=0;
	vis[s]=1;
	int f=0;
	int f2=0;
	while (!q.empty()){
		int now = q.front(); q.pop();
		vis[now] = 0;
		if(f==1)break;
		for (int i = 0; i < v[now].size(); i++){
			if (dis[now] + c[now][i] < dis[v[now][i]]){
				dis[v[now][i]] = dis[now] + c[now][i];
				if (1){
				   kis[v[now][i]]=kis[now]+1;
				    if(kis[v[now][i]]>=n){cout<<"YES";f=1;break;}
				    if(vis[v[now][i]]==0){ q.push(v[now][i]), vis[v[now][i]] = 1;}
				} 
			}
		}
		
	}
	if(!f)cout<<"NO";
	cout<<endl;
	}
	return 0;
}

20分,哪里错了,玄关

2024/6/1 21:13
加载中...