题目链接:
题目大意:
给n个点(n<=100),m条无向边(m<=10000),问这张图的最小环长度。
(注意:无自环,同一个点对之间的多条路最终只算作1条而不是2个点的环,被这里坑了一次)
题目思路:
【最短路】
无向图最小环问题。
有向图最小环的长度为2,但是这题因为是无向图,所以环的长度至少为3。所以可以枚举k为中间点,求i到j不经过k的最短路最后加上Di,k和Dk,j即为答案。
用floyd,时间复杂度是O(n3).
1 // 2 //by coolxxx 3 // 4 #include5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #define min(a,b) ((a)<(b)?(a):(b))16 #define max(a,b) ((a)>(b)?(a):(b))17 #define abs(a) ((a)>0?(a):(-(a)))18 #define lowbit(a) (a&(-a))19 #define sqr(a) ((a)*(a))20 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))21 #define eps 1e-822 #define J 1000023 #define MAX 0x7f7f7f7f24 #define PI 3.141592653589725 #define N 10426 using namespace std;27 int n,m,lll,ans,cas;28 int map[N][N],f[N][N];29 void floyd()30 {31 int i,j,k;32 for(k=1;k<=n;k++)33 {34 for(i=1;i