调了半天也调不好,只能求大佬帮助了
文件读写也莫名用不了 QAQ
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct edge {
ll u,v,w,next;
bool operator <(const edge&a) const {
return w>a.w;
}
} e[200010];
deque<ll> Q;
bool in[100010];
ll head[100010],cnt,dis[100010],vis[100010];
void add_edge(ll u,ll v,ll w) {
e[++cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
e[cnt].next=head[u];
head[u]=cnt;
}
void spfa(ll n,ll end) {
while(!Q.empty())Q.pop_back();
ll ed,v;
Q.push_back(n);
while(!Q.empty()) {
ed=head[Q.front()];
in[Q.front()]=0;
Q.pop_front();
while(ed!=0) {
v=e[ed].v;
if(dis[v]>dis[e[ed].u]+e[ed].w) {
dis[v]=dis[e[ed].u]+e[ed].w;
if(!in[v]) {
if(++vis[v]>=end) {
cout<<"YES\n";
return ;
}
in[v]=1;
if(!Q.empty()&&dis[v]<dis[Q.front()]) {
Q.push_front(v);
} else {
Q.push_back(v);
}
}
}
ed=e[ed].next;
}
}
cout<<"NO\n";
return ;
}
int main() {
// freopen("P3385_9.in","r",stdin);
ll n,m,T;
ll u,v,w;
cin>>T;
for(ll i=1; i<=T; i++) {
memset(dis,0x7f,sizeof(dis));
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
memset(e,0,sizeof(e));
memset(in,0,sizeof(in));
cin>>n>>m;
cnt=0;
for(ll j=1; j<=m; j++) {
cin>>u>>v>>w;
if(w>=0)
add_edge(v,u,w);
add_edge(u,v,w);
}
dis[1]=0;
spfa(1,n);
}
return 0;
}