0分hack全过咋回事QAQ
查看原帖
0分hack全过咋回事QAQ
901005
DENGZIAO楼主2024/10/23 10:39
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1,inf=INT_MAX;
struct V{
	vector<pair<int ,int> >e;
	int d=inf,b,cnt;
}v[N];

int t,n,m;

bool check(){
	queue<int>q;
	for(q.push(1),v[1].d=0;!q.empty();q.pop()){
		int x=q.front();
		v[x].b=0;
		for(auto i:v[x].e){
			if(v[x].d+i.second<v[i.first].d){
				v[i.first].d=v[x].d+i.second;
				if(!v[i.first].b){
					v[i.first].b=1;
					q.push(i.first);
					if(++v[i.first].cnt>=n){
						return 1;
					}
				}
			}
		}
	}
	return 0;
}

int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1,x,y,z;i<=m;i++){
			cin>>x>>y>>z;
			fill(v+1,v+1+n,v[0]);
			v[x].e.emplace_back(y,z);
			if(z>=0){
				v[y].e.emplace_back(x,z);
			}
		}
	if(check()){
		cout<<"YES\n";
	}else{
		cout<<"NO\n";
	}
	}
	

	return 0;
}
/*
emplace 关键字是 C++11 的一个新特性。emplace_back() 和 push_abck() 的区别是:push_back() 在向 vector 尾部添加一个元素时,首先会创建一个临时对象,然后再将这个临时对象移动或拷贝到 vector 中(如果是拷贝的话,事后会自动销毁先前创建的这个临时元素);而 emplace_back() 在实现时,则是直接在 vector 尾部创建这个元素,省去了移动或者拷贝元素的过程。

*/
2024/10/23 10:39
加载中...