Kruskal+并查集。

点很少,按边权值排序,枚举枚举L和R,并查集检查连通性。一旦连通,那么更新答案。

判断连通可以O(1),之前O(n)判的,第一次写的过了,后来T。。

#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
const int maxe = maxn*maxn>>;
int n,m; int u[maxe],v[maxe],w[maxe]; int pa[maxn]; inline bool cmp(int a,int b) { return w[a]<w[b]; }
int r[maxe]; inline void idxSort()
{
for(int i = ; i < m; i++) r[i] = i;
sort(r,r+m,cmp);
} int Find(int x) { return x==pa[x]?x:pa[x]=Find(pa[x]); }
int cnt,ans; inline void Union(int a,int b)
{
int s1 = Find(a),s2 = Find(b);
if(s1 != s2){
pa[s1] = s2,cnt--;
}
} inline void initUFS() { for(int i = ; i <= n; i++) pa[i] = i; cnt = n-; } const int INF = 0x3f3f3f3f; int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m),n){
for(int i = ; i < m; i++)
scanf("%d%d%d",u+i,v+i,w+i); idxSort();
ans = INF;
for(int i = ; i < m; i++){
initUFS();
for(int j = i; j < m; j++){
int R = r[j];
Union(u[R],v[R]);
if(!cnt) {
ans = min(ans,w[R]-w[r[i]]); break;
}
}
}
printf("%d\n",ans==INF?-:ans);
}
return ;
}

最新文章

  1. JavaScript自定义媒体播放器
  2. [转]ORACLE 审计功能
  3. Ms - Sql 定位附近的人
  4. 用Qt开发第一个Hello World程序
  5. 大数据技术hadoop入门理论系列之二&mdash;HDFS架构简介
  6. 如何通过VIM把代码格式化后生成HTML网页代码
  7. Mac OS X 10.10 Yosemite PHP 5.5.14 free type support fix
  8. URAL 1009 K-based Numbers
  9. JavaIO流程--创建文件和目录的实例
  10. H5游戏见缝插针开发
  11. Eclipse导入项目常见问题----服务器版本问题02
  12. java-生产者消费者模式
  13. 自学python Day01
  14. 嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示
  15. Redis for linux安装配置之—-源码安装
  16. 关于JS获取某月最后一天
  17. Jmeter(二十六)Jmeter-Question之“集成Jenkins”
  18. 001-windows下Elasticsearch安装、Elasticsearch-header安装
  19. springboot之登录注册
  20. 【c++】c++中重载输出操作符,为什么要返回引用

热门文章

  1. Android-毛笔的探索与开发
  2. E20180514-hm
  3. iOS 中 延迟操作四种方式
  4. Unity3D调用摄像头,画面为翻转的问题
  5. 原生js回到顶部
  6. 【BZOJ1226】[SDOI2009] 学校食堂
  7. 判断EditText输入的字符串中是否包含有emoji表情
  8. python_22(Form-CRM)
  9. Azkaban是什么?(一)
  10. 完成FileUpload的文件上传功能,且可改按钮样式