vector<Node> adj[maxv];
int n,d[maxv],num[maxv];
bool inq[maxv];
bool SPFA(int s)
{
memset(inq,false,sizeof(inq));
memset(num,0,sizeof(num));
fill(d,d+maxv,inf);
queue<int> q;
q.push(s);
num[s]++;
d[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
inq[u]=false;
for(int j=0;j<adj[u].size();j++)
{
int v=adj[u][j].v;
int dis=adj[u][j].dis;
if(d[u]+dis<d[v])
{
d[v]=d[u]+dis;
if(!inq[v])
{
q.push(v);
inq[v]=true;
num[v]++;
if(num[v]>=n) return false;
}
}
}
}
return true;
}