2、总结:第一个spfa,好气的是用next[]数组判定Compilation error,改成nexte[]就过了。。难道next还是特殊词吗
题意:科学家,虫洞。就是判定负环
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstdio>
#define F(i,a,b) for (int i=a;i<b;i++)
#define FF(i,a,b) for (int i=a;i<=b;i++)
#define mes(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int N=,M=,MAX=; int n,m;
int v[M],u[M],w[M],nexte[M],head[N],num[N],dis[N],vis[N]; void read_gragh()
{
mes(head,-);
scanf("%d%d",&n,&m);
FF(e,,m){
scanf("%d%d%d",&u[e],&v[e],&w[e]);
nexte[e]=head[u[e]];
head[u[e]]=e;
}
} bool spfa()
{
mes(vis,);mes(num,);
mes(dis,INF);
dis[]=;
queue<int>q;q.push();
num[]++;
while(!q.empty())
{
int node=q.front();q.pop();
vis[node]=;
for(int e=head[node];e!=-;e=nexte[e]){
if(dis[v[e]]>dis[node]+w[e]){
dis[v[e]]=dis[node]+w[e];
if(!vis[v[e]]){
vis[v[e]]=;
q.push(v[e]);
num[v[e]]++;
if(num[v[e]]>=n)return true;
}
}
}
} return false;
} int main()
{
int t;
scanf("%d",&t);
while(t--){
read_gragh();
if(spfa())puts("possible");
else puts("not possible");
} return ;
}