多测不清空,爆零两行泪……
20pts代码:
# include<iostream>
# include<vector>
# include<queue>
# include<map>
using namespace std;
# define ll long long
# define p pair<ll,int>
# define m(a,b) make_pair(a,b)
const int N=2e3+5;
const ll inf=0x7fffffff;
int t,n,m,u,v,cnt[N];
vector<p> e[N];
ll w,dis[N];
bool vis[N];
queue<int> q;
void add(int u,int v,ll w){
e[u].push_back(m(w,v));
}
bool spfa(){
q.push(1);
dis[1]=0;
vis[1]=1;
while(!q.empty()){
u=q.front();
q.pop();
vis[u]=0;
for(int i=0,l=e[u].size();i<l;++i){
v=e[u][i].second;
w=e[u][i].first;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
cnt[v]=cnt[u]+1;
if(cnt[v]>=n) return 0;
if(!vis[v]){
q.push(v);
vis[v]=1;
}
}
}
}
return 1;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;++i) dis[i]=inf;
for(int i=1;i<=m;++i){
cin>>u>>v>>w;
add(u,v,w);
if(w>=0) add(v,u,w);
}
if(spfa()) cout<<"NO\n";
else cout<<"YES\n";
}
int main(){
cin>>t;
while(t--) solve();
return 0;
}