题意是给出N个点,Dou个边,每个边需要花费V时间,然后给出Sig个单项边,每个边花费时间-V
问能不能从某个点开始走,转一圈回到这个点
其实就是求负环
用的是Floyd算法
#include<cstdio>
#include<iostream>
#define MAX 10000000
#define len 510
using namespace std;
int n;
int dou,sig;
int edg[len][len];
bool Floyd()
{
bool flag=false;
for(int k=1; k<=n; ++k)
{
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=n; ++j)
{
if(edg[i][j]>edg[i][k]+edg[k][j])
edg[i][j]=edg[i][k]+edg[k][j];
}
if(edg[i][i]<0)
{
flag=true;
break;
}
}
if(flag==true)
break;
}
return flag;
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{