题意:

  给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路。

解析:

  应该都想过用prime的次小生成树做。。但二维数组开不了那么大。。所以只能用kruskal了。。。。

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff, maxm = 1e5+;
int n, m;
int f[maxn], ra[maxn], vis[maxn], edge[maxn]; struct node
{
int u, v, w;
}Node[maxm]; bool cmp(node a, node b)
{
return a.w < b.w;
}
int find(int x)
{
return f[x] == x ? x : find(f[x]);
} int query(int x, int y)
{
int ans1 = , ans2 = -;
int cur = x;
while() //从x回溯到祖先
{
vis[cur] = ans1; //标记 从x到当前cur的最大权值的路段
if(cur == f[cur]) break;
ans1 = max(ans1, edge[cur]);
cur = f[cur];
}
cur = y;
while() //从y回溯到祖先
{
if(vis[cur] >= ) //直到遇到y和x的最近公共祖先
{
ans2 = max(ans2, vis[cur]);
break;
}
ans2 = max(ans2, edge[cur]);
cur = f[cur];
}
cur = x;
while() //还原vis。。其实用一个memset就好了。。但时间复杂度竟然比用这个大10倍。。emm。。。
{
vis[cur] = -;
if(cur == f[cur]) break;
cur = f[cur];
}
return ans2;
} void init()
{
rap(i, , n)
{
f[i] = i;
ra[i] =;
}
mem(vis, -);
} int main()
{
bool flag = true;
while(~scanf("%d%d", &n, &m))
{
init();
rap(i, , m)
{
scanf("%d%d%d", &Node[i].u, &Node[i].v, &Node[i].w);
}
sort(Node+, Node+m+, cmp);
rap(i, , m) //按秩合并
{
int l = find(Node[i].u);
int r = find(Node[i].v);
if(l == r) continue;
if(ra[l] <= ra[r]) f[l] = r, ra[r] = max(ra[r], ra[l] + ), edge[l] = Node[i].w; //儿子标记权值
else f[r] = l, ra[l] = max(ra[l], ra[r] + ), edge[r] = Node[i].w;
}
if(flag) flag = false;
else printf("\n");
int q;
scanf("%d", &q);
rap(i, , q)
{
int u, v;
scanf("%d%d", &u, &v);
printf("%d\n", query(u, v));
} } return ;
}

最新文章

  1. [No00006F]总结C#获取当前路径的各种方法
  2. DS实验题 融合软泥怪-2 Heap实现
  3. 浮动【电梯】或【回到顶部】小插件:iElevator.js
  4. 对于JSP的调试
  5. torch基本命令
  6. 洛谷P1470 最长前缀 Longest Prefix
  7. TZC 1472 逆置正整数,去前导零 (java一句话秒杀)
  8. iOS 基础 第五天(0811)
  9. (原)ubuntu上安装dlib
  10. oracle 查询表的大小,表空间的使用情况,默认表空间
  11. MVC与WebForm的简单的比较
  12. 辛格尔顿和Android
  13. 【记录】解析具有合并单元格的Excel
  14. java多态加深
  15. Linux Ubuntu从零开始部署web环境及项目 -----快捷键设置(四)
  16. eclipse启动tomcat正常,但是debug启动报错FATAL ERROR in native method:JDWP No transports initialized,jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197) ERROR: transport error 202: connect failed:Connection timed out
  17. winform判断一个事件是否已经绑定了事件处理函数
  18. 在Java中调用C/C++本地库
  19. EBS 快速创建供应商的标准创建逻辑
  20. linux 压缩解压命令zip、gz、tar.gz、bz2、tar.bz2、.tar.xz

热门文章

  1. zedboard学习(1)OLED驱动显示图像
  2. Jlink v8仿真器在64位系统上刷固件
  3. eclipse jetty debug
  4. kettle 将job等导入导出成xml
  5. Laya 自适应 不拉伸处理
  6. fastCMS数据库相关操作类
  7. java获取IP地址
  8. linux常用的查看设备的命令
  9. Wacom发布Cintiq Companion 2
  10. 路由器DMZ功能