思路:

考虑一个暴力:枚举最大的边权和最小的边权,然后将边权在这之间的边全拿出来构成一张无向图,剩下的就是判断是否存在一条从$S$到$T$的路径。
相当于判$S$和$T$是否连通,用并查集连一下即可。
时间复杂度:O(m³α(n))
考虑优化,枚举了最小边权之后,从小到大枚举最大边权,每次能新添加一条边。
因为并查集是支持动态加边的,所以复杂度就降到O(m²α(n))了。
一开始存边的vector忘记每次清零,一直Wrong Answer。

 #include<cstdio>
#include<vector>
#include<algorithm>
const int inf=0x7fffffff;
struct Edge {
int from,to,w;
bool operator < (const Edge &x) const {
return w<x.w;
}
};
std::vector<Edge> e;
inline void add_edge(const int u,const int v,const int w) {
e.push_back((Edge){u,v,w});
}
const int N=;
class DisjointSet {
private:
int anc[N];
int Find(const int x) {
return x==anc[x]?x:anc[x]=Find(anc[x]);
}
public:
void reset(const int n) {
for(int i=;i<=n;i++) anc[i]=i;
}
bool isConnected(const int x,const int y) {
return Find(x)==Find(y);
}
void Union(const int x,const int y) {
anc[Find(x)]=Find(y);
}
};
DisjointSet s;
int main() {
int n,m;
while(~scanf("%d%d",&n,&m)) {
e.clear();
while(m--) {
int s,t,w;
scanf("%d%d%d",&s,&t,&w);
add_edge(s,t,w);
}
std::sort(e.begin(),e.end());
int q;
scanf("%d",&q);
while(q--) {
int S,T;
scanf("%d%d",&S,&T);
int ans=inf;
for(unsigned i=;i<e.size();i++) {
s.reset(n);
for(unsigned j=i;j<e.size();j++) {
int &u=e[j].from,&v=e[j].to;
if(!s.isConnected(u,v)) {
s.Union(u,v);
if(s.isConnected(S,T)) {
ans=std::min(ans,e[j].w-e[i].w);
break;
}
}
}
}
printf("%d\n",ans!=inf?ans:-);
}
}
return ;
}

最新文章

  1. angular学习笔记(二十八-附2)-$http,$resource中的promise对象
  2. 【转】linux查看及修改文件权限以及相关
  3. 思科交换机配置DHCP的四个方面
  4. C# 项目提交过程中感受
  5. 用css实现条纹背景
  6. 网络编程——URL编程
  7. HTTP常见错误编号
  8. win7系统电脑连接小米蓝牙音箱
  9. 【STL】-迭代器的用法
  10. jQuery 1.7以后 jQuery2 新元素绑定事件on替代live
  11. Visual C++ 打印编程技术-编程基础
  12. 查看alter错误,grep -A,-B,-C的妙用
  13. test知识
  14. MySQL的备份与还原以及常用数据库查看命令
  15. 网友&quot;就像一支烟&quot;山寨币分析估值方法
  16. Jmeter简单介绍与搭配Jenkins实现自动化
  17. redis 在 php 中的应用(Sorted-set篇)
  18. CDH 报错:UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 0-11: ordinal not in range
  19. windows 解放鼠标快捷键
  20. 流明(lux)和坎德拉;

热门文章

  1. Andrew Ng在coursera上的ML视频 知识点笔记(2)
  2. windows系统上搭建redis集群哨兵及主从复制
  3. 【转载】如何让图片按比例响应式缩放、并自动裁剪的css技巧
  4. LeetCode(37): 每k个一组翻转链表
  5. hdu3308
  6. js中常见的数组排序算法-冒泡排序和选择排序
  7. Linux下配置自动更新时间
  8. this和super不能同时出现在构造方法中
  9. hdu 3405 删掉某点后 求最小生成树
  10. HTML5游戏 看你有多“色” 开发