这是一道写起来比较顺手的题目

没有各种奇怪的细节,基本就是Kruskal和倍增LCA的模板。。

题目大意:对于一个无向带权图,询问两点之间一条路,使得这条路上的最长边最小,输出最小最长边的的值

那么既然要使最长边最短,我们可以先构造一棵最小生成树

由于kruskal已经将边排了序了,所以对于这棵树,每条边都尽量最短了

然后我们再进行lca求出两点路径上的最长边,即为答案

 #include<stdio.h>
 #include<string.h>
 #include<algorithm>
 using namespace std;
 ;
 struct node{
     int u,v,cost,next;
 }e[maxn*],et[maxn*];
 int head[maxn],n,m,K,tot,logn,u,v;
 ],mx[maxn][];

 void insert(int u, int v, int c){
     e[++tot].u=u; e[tot].v=v; e[tot].cost=c; e[tot].next=head[u]; head[u]=tot;
 }

 bool cmp(node a, node b){
     return a.cost<b.cost;
 }

 int find(int x){
     return f[x]==x?x:f[x]=find(f[x]);
 }

 void MST(){
     ; i<=n; i++) f[i]=i;
     ; i<=m; i++){
         int fx=find(et[i].u), fy=find(et[i].v);
         if (fx!=fy){
             f[fy]=fx;
             insert(et[i].u,et[i].v,et[i].cost);
             insert(et[i].v,et[i].u,et[i].cost);
         }
     }
 }

 void dfs(int u, int f, int d, int cost){
     dep[u]=d; fa[u][]=f; mx[u][]=cost;
     ; i<=logn; i++) fa[u][i]=fa[fa[u][i-]][i-];
     ; i<=logn; i++) mx[u][i]=max(mx[u][i-],mx[fa[u][i-]][i-]);
     ; i=e[i].next)
         ,e[i].cost);
 }

 int lca_max(int u, int v){
     ;
     if (dep[u]>dep[v]) swap(u,v);
     while (dep[u]<dep[v]){
         ; i--)
             if (dep[u]<dep[fa[v][i]]){
                 ans=max(ans,mx[v][i]);
                 v=fa[v][i];
             }
         ans=max(ans,mx[v][]);
         v=fa[v][];
     }
     if (u==v) return ans;
     ; i--){
         if (fa[u][i]!=fa[v][i]){
             ans=max(ans,max(mx[v][i],mx[u][i]));
             u=fa[u][i]; v=fa[v][i];
         }
     }
     ans=max(ans,max(mx[u][],mx[v][]));
     return ans;
 }

 int main(){
     scanf("%d%d%d", &n, &m, &K);
     tot=-; memset(head,-,sizeof(head));
     <<logn)<n) logn++;
     ; i<=m; i++)
         scanf("%d%d%d", &et[i].u, &et[i].v, &et[i].cost);
     sort(et+,et++m,cmp);
     MST();
     dfs(,,,);
     while (K--){
         scanf("%d%d", &u, &v);
         printf("%d\n", lca_max(u,v));
     }
     ;
 }

bzoj3732: Network--kruskal最小生成树+LCA的更多相关文章

  1. 【BZOJ3732】 Network Kruskal+倍增lca

    Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...

  2. BZOJ3732: Network(Kruskal重构树)

    题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...

  3. BZOJ 3732 Network Kruskal+倍增LCA

    题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...

  4. BZOJ-3732 Network 图论 最小生成树 倍增

    题面 题意:给你N个点,M条边的无向图 (N<=15000,M<=30000)第j条边的长度为 dj (1<=dj<=1e9),然后K个询问 (1<=K<=2000 ...

  5. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  6. 贪心算法(2)-Kruskal最小生成树

    什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...

  7. Prim和Kruskal最小生成树

    标题: Prim和Kruskal最小生成树时 限: 2000 ms内存限制: 15000 K总时限: 3000 ms描述: 给出一个矩阵,要求以矩阵方式单步输出生成过程.要求先输出Prim生成过程,再 ...

  8. [算法系列之二十七]Kruskal最小生成树算法

    简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...

  9. bzoj3732: Network(最小生成树+LCA)

    3732: Network 题目:传送门 题解: 第一眼就看到最大边最小,直接一波最小生成树. 一开始还担心会错,问了一波肉大佬,任意两点在最小生成树上的路径最大边一定是最小的. 那么事情就变得简单起 ...

随机推荐

  1. Hibernate的核心API

    Configuration:负责管理Hibernate的配置信息 1.加载核心配置文件 核心配置有两种: hibernate.properties 加载:Configuration configura ...

  2. Liferay 6.2 改造系列之十五:修改默认可用语言

    在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Specify the locales that are enabled ...

  3. JQ学习(二)

    jQuery 效果 jQuery hide() 和 show() 语法: $(selector).hide(speed,callback); $(selector).show(speed,callba ...

  4. SpringMyBatis解析3-MapperFactoryBean

    在使用mybatis的时候,我们获取dao的方式一般是这样: SqlSession session=sessionFactory.openSession(); PersonDao personDao= ...

  5. 程序员必备的代码审查(Code Review)清单【转载】

    在我们关于高效代码审查的博文中,我们建议使用一个检查清单.在代码审查中,检查清单是一个非常好的工具——它们保证了审查可以在你的团队中始终如一的进行.它们也是一种保证常见问题能够被发现并被解决的便利方式 ...

  6. BZOJ 3282 Tree ——KD-Tree

    [题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...

  7. POJ1904 King's Quest(完备匹配可行边:强连通分量)

    题目大概就是说给一张二分图以及它的一个完备匹配,现在问X部的各个点可以与Y部那些些点匹配,使得X部其余点都能找到完备匹配. 枚举然后匹配,当然不行,会超时. 这题的解法是,在二分图基础上建一个有向图: ...

  8. Tomcat在局域网中localhost可以访问,但是无法通过本地ip访问,127.0.0.1也无法访问问题的解决方法

    环境:Tomcat6,Windows Server2008 R2, Tomcat使用默认端口8080. 在BO服务器上使用Tomcat6作为WEB服务器,在服务器本地使用http://localhos ...

  9. UVa 10806 & 费用流+意识流...

    题意: 一张无向图,求两条没有重复的从S到T的路径. SOL: 网络流为什么屌呢..因为网络流的容量,流量,费用能对许许多多的问题进行相应的转化,然后它就非常的屌. 对于这道题呢,不是要没有重复吗?不 ...

  10. HDU 2855 (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...