题目链接:
本来想着m^2的复杂度撑不住,对于这种擦着边的复杂度就好慌。
首先对所有的边排个序,然后枚举每个可以构成生成树的区间(L,R),取区间里面构成树的边的权值的最小和最大的差值,求最小值即可。
如果已经构成生成树可以break掉优化下。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn = 5005; 7 struct edge 8 { 9 int u,v,w;10 };11 edge e[maxn];12 int pre[105];13 int Find(int x)14 {15 return pre[x]==x?x:pre[x]=Find(pre[x]);16 }17 bool cmp(edge A,edge B)18 {19 return A.w =n)51 {52 break;53 }54 }55 if(count1>=n)56 {57 ans = min(ans,maxv-minv);58 }59 }60 if(ans!=20000) printf("%d\n",ans);61 else printf("-1\n");62 }63 return 0;64 }