bzoj3732Network
题意:
给一个无向图,k个询问求节点a到节点b最长边的最小值。n,k≤15000。
题解:
”最长边的最小值“经常可以用最小生成树解决,因为生成树里的每一条边都是可取的最小边,求完生成树之后就是经典的倍增应用:求lca的时候顺便维护一下边权最大值即可。
代码:
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <queue>
- #define inc(i,j,k) for(int i=j;i<=k;i++)
- #define maxn 30010
- using namespace std;
- inline int read(){
- char ch=getchar(); int f=,x=;
- while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
- while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
- return f*x;
- }
- struct abc{int f,t,w;}abcd[maxn]; bool cmp(abc a,abc b){return a.w<b.w;}
- struct e{int t,w,n;}es[maxn*]; int g[maxn],ess;
- void pe(int f,int t,int w){
- es[++ess]=(e){t,w,g[f]}; g[f]=ess; es[++ess]=(e){f,w,g[t]}; g[t]=ess;
- }
- int n,m,k,p[maxn],fa[][maxn],mx[][maxn],tot,dep[maxn];
- int find(int x){return x==p[x]?x:p[x]=find(p[x]);}
- void dfs(int x){
- for(int i=g[x];i;i=es[i].n)if(es[i].t!=fa[][x])
- fa[][es[i].t]=x,mx[][es[i].t]=es[i].w,dep[es[i].t]=dep[x]+,dfs(es[i].t);
- }
- int lca(int x,int y){
- if(dep[x]<dep[y])swap(x,y); int t=dep[x]-dep[y],ans=;
- for(int i=;(<<i)<=n;i++)if(t&(<<i))ans=max(ans,mx[i][x]),x=fa[i][x];
- for(int i=;i>=;i--)if(fa[i][x]!=fa[i][y])
- ans=max(ans,mx[i][x]),ans=max(ans,mx[i][y]),x=fa[i][x],y=fa[i][y];
- if(x==y)return ans;else{ans=max(ans,mx[][x]); ans=max(ans,mx[][y]); return ans;}
- }
- int main(){
- n=read(); m=read(); k=read(); inc(i,,n)p[i]=i;
- inc(i,,m){int x=read(),y=read(),z=read(); abcd[i]=(abc){x,y,z};} sort(abcd+,abcd+m+,cmp);
- inc(i,,m){
- int x=find(abcd[i].f),y=find(abcd[i].t); if(x!=y)pe(x,y,abcd[i].w),p[x]=y,tot++; if(tot==n-)break;
- }
- dfs();
- for(int i=;(<<i)<=n;i++)inc(j,,n)
- fa[i][j]=fa[i-][fa[i-][j]],mx[i][j]=max(mx[i-][j],mx[i-][fa[i-][j]]);
- inc(i,,k){int x=read(),y=read(); printf("%d\n",lca(x,y));}
- return ;
- }
20161115
bzoj3732Network的更多相关文章
- BZOJ3732Network——kruskal重构树+倍增+LCA/最小生成树+倍增
题目描述 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 & ...
- 【LCA+MST】BZOJ3732-Network
[题目大意] 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N.图中有M条边 (1<=M<=30,000) ,第j条边的长度:d_j (1<=d_j ...
随机推荐
- idea出现 淇℃伅 乱码
问题:我是idea出现 淇℃伅 乱码, 解决:修改 tomcat 下的 logging.properties这个文件 为 GBK 就好了. 参考:https://blog.csdn.net/weixi ...
- 基于JQuery的简单富文本编辑器
利用jQuery实现最简单的编辑器 我试了很多种方法,目前最快捷能够实现及其简单的编辑可以使用 document.execCommand("ForeColor", "fa ...
- spring Cloud网关之Spring Cloud Gateway
Spring Cloud Gateway是什么?(官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/) Spring C ...
- mingw32 exception在sjlj与dwarf差别-反汇编分析
sjlj (setjump/longjump)与dwarf-2为mingw32两种异常处理模型的实现.sjlj有着开销,而随linux发行的mingw32开发库包都是用sjlj版编译的,而Qt却采用d ...
- 这一次搞懂Spring自定义标签以及注解解析原理
前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Se ...
- vulstack红队评估(五)
一.环境搭建: ①根据作者公开的靶机信息整理 虚拟机密码: Win7: heart 123.com #本地管理员用户 sun\Administrator dc123.com #域管用户,改 ...
- selenium(4)-针对键盘的操作
有哪些键盘操作 删除键 空格键 制表键 回退键 回车键 全选 复制 剪切 粘贴 F1-F12 ......其实就是所有键盘都能模拟,包括alt.shift.insert.delete.home等等等. ...
- Mac OS 生成 icon 和 ico 文件
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1. 生成 IC ...
- Docker Playgrounds
上级:https://www.cnblogs.com/hackerxiaoyon/p/12747387.html Flink Operations Playground flink的操作场地,从这一小 ...
- 关于soapui的使用
打开SoapUI软件,点击File -->NewSoapProject 创建测试项目 输入测试项目名称,点击OK保存 在测试项目上右击选择AddWSDL 输入所需要测试的接口地址,点击ok确 ...