BZOJ 3732: Network Kruskal 重构树
模板题,练练手~
Code:
#include <cstdio>
#include <algorithm>
#define N 80000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
namespace tree {
int hd[N],to[N],nex[N],edges;
int fa[N],top[N],siz[N],dep[N],son[N];
void addedge(int u,int v) {
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void dfs1(int u,int ff) {
fa[u]=ff,siz[u]=1,dep[u]=dep[ff]+1;
for(int i=hd[u];i;i=nex[i])
if(to[i]!=ff) {
dfs1(to[i],u),siz[u]+=siz[to[i]];
if(siz[to[i]]>siz[son[u]]) son[u]=to[i];
}
}
void dfs2(int u,int tp) {
top[u]=tp;
if(son[u]) dfs2(son[u],tp);
for(int i=hd[u];i;i=nex[i])
if(to[i]!=son[u]&&to[i]!=fa[u])
dfs2(to[i],to[i]);
}
int LCA(int x,int y) {
while(top[x]!=top[y])
dep[top[x]]>dep[top[y]]?x=fa[top[x]]:y=fa[top[y]];
return dep[x]<dep[y]?x:y;
}
};
struct Edge {
int u,v,c;
}e[N];
bool cmp(Edge a,Edge b) {
return a.c<b.c;
}
int p[N],maxv[N],n,m,k,tot;
int find(int x) {
return p[x]==x?x:p[x]=find(p[x]);
}
int main() {
int i,j;
// setIO("input");
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=m;++i) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].c);
for(i=1;i<=n;++i) p[i]=i;
sort(e+1,e+1+m,cmp);
tot=n;
for(i=1;i<=m;++i) {
int u=e[i].u,v=e[i].v,c=e[i].c;
int x=find(u),y=find(v);
if(x!=y) {
++tot;
p[tot]=tot;
maxv[tot]=c;
p[x]=p[y]=tot;
tree::addedge(tot,x),tree::addedge(tot,y);
}
}
tree::dfs1(tot,0);
tree::dfs2(tot,tot);
for(i=1;i<=k;++i) {
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",maxv[tree::LCA(x,y)]);
}
return 0;
}
BZOJ 3732: Network Kruskal 重构树的更多相关文章
- [bzoj 3732] Network (Kruskal重构树)
kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...
- 【BZOJ 3732】 Network Kruskal重构树+倍增LCA
Kruskal重构树裸题, Sunshine互测的A题就是Kruskal重构树,我通过互测了解到了这个神奇的东西... 理解起来应该没什么难度吧,但是我的Peaks连WA,,, 省选估计要滚粗了TwT ...
- BZOJ3732: Network(Kruskal重构树)
题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...
- BZOJ 3732 Network Kruskal+倍增LCA
题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...
- 【BZOJ】3732: Network【Kruskal重构树】
3732: Network Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2812 Solved: 1363[Submit][Status][Dis ...
- Kruskal重构树+LCA || BZOJ 3732: Network
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=3732 题解:Kruskal重构树板子 代码: #include<cstdio> ...
- BZOJ 3732 Network 【模板】kruskal重构树
[题解] 首先,我们可以发现,A到B的所有路径中,最长边的最小值一定在最小生成树上.我们用Kruskal最小生成树时,假设有两个点集U,V,若加入一条边w(u,v)使U,V联通,那么w就是U中每个点到 ...
- Kruskal重构树学习笔记+BZOJ3732 Network
今天学了Kruskal重构树,似乎很有意思的样子~ 先看题面: BZOJ 题目大意:$n$ 个点 $m$ 条无向边的图,$k$ 个询问,每次询问从 $u$ 到 $v$ 的所有路径中,最长的边的最小值. ...
- BZOJ 3551: [ONTAK2010]Peaks加强版 [Kruskal重构树 dfs序 主席树]
3551: [ONTAK2010]Peaks加强版 题意:带权图,多组询问与一个点通过边权\(\le lim\)的边连通的点中点权k大值,强制在线 PoPoQQQ大爷题解传送门 说一下感受: 容易发现 ...
随机推荐
- max-http-header-size 引发的一起血案(附:查gc方法)
最近在做项目的时候发现其中一个服务出现了性能上的问题,项目启动后,出现内存溢出异常. 查看堆内存使用情况 分析然后找到占用空间的类,当时是byte[]占用99%的空间,然后点开查看实例发现是http占 ...
- (转)C++ bitset用法
今天做题发现要用到bitset,找到一篇介绍的巨好的文章. 转载自:https://www.cnblogs.com/magisk/p/8809922.html C++的 bitset 在 bitset ...
- 【STM32】STM32串口配置的一般步骤(库函数)
STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd(); GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...
- ubuntu 18.04 配置notebook远程连接的坑
jupyter-notebook的安装不在此说明 在网上搜了很多方案都不行,好不容易从坑里爬出来 以下为远程连接配置方法 1.生成配置文件 jupyter notebook --generate-co ...
- Mysql workbench 字段类型(转载)
转载自:https://blog.csdn.net/j_h_xie/article/details/52924521 项目初始,在使用workbench建表时,字段中有PK,NN,UQ,BIN,UN, ...
- 房地产大佬潘石屹推荐学Python编程,这本从0到1就够了
潘石屹推荐学Python编程,很多人都不相信,他的微博真真切切. 连房地产都开始学Python了,因为要听懂机器,让机器为我所用. 再不学习Python真的晚了!!!! 如何学? 怎么学? 还是推荐高 ...
- Python应用RabbitMQ教程
介绍 RabbitMQ是一个消息代理.它的工作就是接收和转发消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ就扮演着邮箱.邮局以及邮 ...
- redis 学习(12)-- redis 发布订阅
redis 发布订阅 发布订阅模式中的角色 发布者(publisher) 订阅者(subscriber) 频道(channel) 如图所示: 发布者发布消息到频道,订阅了频道的订阅者可以收到消息,订阅 ...
- macOS Sierra 如何安装任何来源的软件
为了安全性考虑,macos是要手动勾选来自任何来源的选项才可以安装第三方应用软件,系统升级后,在新的系统中这一项是默认不显示的,如果想要出现和这一勾选选项,可以从终端中输入 sudo spctl -- ...
- Spark在美团是怎么实现的
目录 1. 美团离线计算平台架构都有哪些框架? 2. 为什么要使用Spark架构? 3. spark推广过程中需要注意哪些方面? 前言 美团是数据驱动的互联网服务,用户每天在美团上的点击.浏览.下单支 ...