此题最大最小搞的太复杂。。。并查集维护连通块,连通块内floyd就可以了
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define eps 1e-6 #define ll __int64 using namespace std; vector part[1010]; int mp[1010][1010],n,r[1010],t[1010],vis[1010],dis[1010][1010]; int root(int a) { if(r[a]==a) return a; return r[a]=root(r[a]); } void merge(int a,int b) { int ra=root(a); int rb=root(b); if(ra!=rb) r[ra]=rb; } int floyd(int s) { int m,i,j,k,mmax,mmin; m=part[s].size(); for(i=0;i