#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 210
#define INF 2147483646
using namespace std; int f[MAXN], Rank[MAXN]; //Rank长度
int n, m, pos; struct Edge{
int u, v, val;
//按照val从小到大排列
friend bool operator<(const Edge&a, const Edge&b){
return a.val < b.val;
}
}arr[MAXN*MAXN]; void init(){
for (int i = ; i<MAXN; ++i)
f[i] = i, Rank[i] = ;
} int find(int x){
int i, j = x;
while (j != f[j]) j = f[j];
while (x != j){
i = f[x]; f[x] = j; x = i;
}
return j;
} void Union(int x, int y){
int a = find(x), b = find(y);
if (a == b)return;
if (Rank[a]>Rank[b])
f[b] = a;
else{
if (Rank[a] == Rank[b])
++Rank[b];
f[a] = b;
}
} int main(){
int u, v, speed, Q;
while (scanf("%d%d", &n, &m) != EOF){
for (int i = ; i<m; ++i)
scanf("%d%d%d", &arr[i].u, &arr[i].v, &arr[i].val);
sort(arr, arr + m);
scanf("%d", &Q);
while (Q--){
scanf("%d%d", &u, &v);
int ans = INF;
for (int j = ; j < m; ++j){
init();
for (int k = j; k < m; ++k){
Union(arr[k].u, arr[k].v);
if (find(u) == find(v)){
ans = min(ans, arr[k].val - arr[j].val); //使ans尽可能的小
break;
}
}
}
if (ans == INF)
printf("-1\n");
else
printf("%d\n", ans);
}
}
//system("pause");
return ;
}

最新文章

  1. C#设计模式-访问者模式
  2. ComboBox,三级联动菜单,新入门点小白,有些代码有待优化,大神勿喷
  3. cctype头文件中的一些内容
  4. dll文件是什么
  5. Python学习笔记(三)数据类型
  6. Java Inner Classes
  7. 具有timeout 功能的函数调用
  8. 关于Rational Functional Tester (RFT)的简单介绍
  9. BZOJ 1046: [HAOI2007]上升序列 LIS -dp
  10. [翻译][Trident] Trident state原理
  11. OS开发网络篇—监测网络状态
  12. CSS3 2D转换
  13. psycopg2接口的基本用法
  14. Linux系统-解压缩命令集合
  15. PAT1064: Compelte Binary Search Tree
  16. Java开发笔记(八十五)通过字符流读写文件
  17. 新数据革命: 开源C#图形化爬虫引擎Hawk5发布
  18. python描述器
  19. [No0000F1]js获取喜马拉雅和荔枝FM电台专辑音频
  20. cacheManager ABP中的缓存

热门文章

  1. ok6410[000] ubuntu1604_64bit下安装wps
  2. ViewPagerTransforms
  3. OpenStack源码系列---nova-api
  4. HDOJ--1869--六度分离(用三种算法写的,希望能比較出来他们之间的差别)
  5. MongoDB经常使用命令
  6. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
  7. HBase2.0新特性之In-Memory Compaction
  8. 如何解决Windows的端口占用问题?
  9. MessageBox_ swt
  10. RabbitMQ 使用