貌似其他36pts都是因为没清空vector 可是我这里已经.clear()了啊
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
struct edge
{
int v,w;
};
vector<edge> e[3005];
int dis[3005],inq[3005],cnt[3005];
queue<int>q;
bool spfa(int n,int s)
{
for(int i=1;i<=n;i++)
dis[i]=INT_MAX,inq[i]=false,cnt[i]=0;
dis[s]=0,inq[s]=1,cnt[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
inq[u]=0;
for(int j=0;j<e[u].size();j++)
{
edge ed=e[u][j];
int v=ed.v,w=ed.w;
if(dis[v]>dis[u]+w)
dis[v]=dis[u]+w;
if(!inq[v])
q.push(v);
inq[v]=1;
cnt[v]++;
if(cnt[v]>n)
return true;
}
}
return false;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
if(w>=0)
{
e[u].push_back((edge){v,w});
e[v].push_back((edge){u,w});
}
else
e[u].push_back((edge){v,w});
}
if(spfa(n,1))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
for(int i=1;i<=n;i++)
e[i].clear();
memset(dis,sizeof(dis),0);
memset(inq,sizeof(dis),0);
memset(cnt,sizeof(dis),0);
}
return 0;
}