我怀疑是vector清空没写对,导致多测出错。但我没有证据。
#include<bits/stdc++.h>
using namespace std;
struct note{
int v,w;
};
int t,n,m,x,y,z,u,dis[2001],cnt[2001];bool vis[2001];
vector<note>e[2001];
queue<int>dl;
bool spfa(int s)
{
dis[s]=0,vis[s]=1,dl.push(s);
while(!dl.empty())
{
u=dl.front(),dl.pop(),vis[u]=0;
for(auto i:e[u])
if(dis[i.v]>dis[u]+i.w)
{
dis[i.v]=dis[u]+i.w,cnt[i.v]=cnt[u]+1;
if(cnt[i.v]>=n)
return 1;
if(vis[i.v]==0)
vis[i.v]=1,dl.push(i.v);
}
}
return 0;
}
int main()
{
cin>>t;
while(t--)
{
memset(dis,63,sizeof(dis));
memset(cnt,0,sizeof(cnt));
memset(vis,0,sizeof(vis));
for(int i=1;i<2001;i++)
e[i].clear();
while(!dl.empty())
dl.pop();
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>x>>y>>z,e[x].push_back({y,z});
if(spfa(1))
cout<<"YES\n";
else
cout<<"NO\n";
}
return 0;
}