题目大意:
规定n个点,可以从任一点出发,要求判断最后能否回到该点来。已知一些连通边,双向连通边为正权,单向连通边为负。
解法:
判断两点(1)能否构成环(2)环的权值和是否为负数;
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f
queue<int> q;
int aa[1000][1000];
int n,m,k;
int dis[1000];
int vis[1000];
int cnt[1000];
int SPFA()
{
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
dis[1]=0;
vis[1]=1;
q.push(1);
while(!q.empty())
{
int u=q.front();
int i;
q.pop();
vis[u]=0;
for(i=1;i<=n;i++)
{
if(dis[i]>aa[u][i]+dis[u])
{