3732: Network

题目:传送门


题解:

   第一眼就看到最大边最小,直接一波最小生成树。

   一开始还担心会错,问了一波肉大佬,任意两点在最小生成树上的路径最大边一定是最小的。

   那么事情就变得简单起来了嘿嘿嘿,建棵树,直接在线LCA啊,用一个mx[i][j]记录i往上2^j这段区间的最大值。


代码:

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int x,y,c;
}a[];int len;
void ins(int x,int y,int c)
{
len++;a[len].x=x;a[len].y=y;a[len].c=c;
}
struct edge
{
int x,y,c,next;
}e[];int llen,last[];
void inss(int x,int y,int c)
{
llen++;e[llen].x=x;e[llen].y=y;e[llen].c=c;
e[llen].next=last[x];last[x]=llen;
}
int fa[];
int findfa(int x){if(fa[x]!=x)fa[x]=findfa(fa[x]);return fa[x];}
bool cmp(node n1,node n2){return n1.c<n2.c;}
int n,m,T;
int bin[],dep[],f[][];
int mx[][];//记录i~i+2^j的最大边值
void pre_tree_node(int x)
{
for(int i=;i<= && dep[x]>=bin[i];i++)
f[x][i]=f[f[x][i-]][i-],mx[x][i]=max(mx[x][i-],mx[f[x][i-]][i-]);
for(int k=last[x];k;k=e[k].next)
{
int y=e[k].y;
if(y!=f[x][])
{
dep[y]=dep[x]+;
f[y][]=x;mx[y][]=e[k].c;
pre_tree_node(y);
}
}
}
int sol(int x,int y)
{
int maxx=;
if(dep[x]<dep[y])swap(x,y);
for(int i=;i>=;i--)
if(dep[x]-dep[y]>=bin[i])
maxx=max(maxx,mx[x][i]),x=f[x][i];
if(x==y)return maxx;
for(int i=;i>=;i--)
if(dep[x]>=bin[i] && f[x][i]!=f[y][i])
maxx=max(maxx,max(mx[x][i],mx[y][i])),x=f[x][i],y=f[y][i];
maxx=max(maxx,max(mx[x][],mx[y][]));
return maxx;
}
int main()
{
bin[]=;for(int i=;i<=;i++)bin[i]=bin[i-]<<;
scanf("%d%d%d",&n,&m,&T);
llen=len=;memset(last,,sizeof(last));
for(int i=;i<=m;i++)
{
int x,y,c;scanf("%d%d%d",&x,&y,&c);
ins(x,y,c);ins(y,x,c);
}
sort(a+,a+len+,cmp);
for(int i=;i<=n;i++)fa[i]=i;int tt=;
for(int i=;i<=len;i++)
{
int fx=findfa(a[i].x),fy=findfa(a[i].y);
if(fx!=fy)
{
fa[fy]=fx,tt++;
inss(a[i].x,a[i].y,a[i].c);
inss(a[i].y,a[i].x,a[i].c);
if(tt==n-)break;
}
}
for(int i=;i<=n;i++)
if(fa[i]==i)
f[i][]=,dep[i]=,pre_tree_node(i);
while(T--)
{
int st,ed;scanf("%d%d",&st,&ed);
printf("%d\n",sol(st,ed));
}
return ;
}

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

  1. bzoj3732: Network--kruskal最小生成树+LCA

    这是一道写起来比较顺手的题目 没有各种奇怪的细节,基本就是Kruskal和倍增LCA的模板.. 题目大意:对于一个无向带权图,询问两点之间一条路,使得这条路上的最长边最小,输出最小最长边的的值 那么既 ...

  2. poj 3417 Network(tarjan lca)

    poj 3417 Network(tarjan lca) 先给出一棵无根树,然后下面再给出m条边,把这m条边连上,然后每次你能毁掉两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 我们设 ...

  3. 【bzoj3732】Network 最小生成树+倍增LCA

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

  4. BZOJ3732 解析报告//LCA,最小生成树

    3732: Network 题目描述 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的 ...

  5. 【kruscal】【最小生成树】【块状树】bzoj3732 Network

    跟去年NOIP某题基本一样. 最小生成树之后,就变成了询问连接两点的路径上的权值最大的边. 倍增LCA.链剖什么的随便搞. 块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权 ...

  6. BZOJ 3732 Network —— 最小生成树 + 倍增LCA

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 <= N <= 15, ...

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

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

  8. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  9. [poj2349]Arctic Network(最小生成树+贪心)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17758   Accepted: 5646 D ...

随机推荐

  1. poj1286 Necklace of Beads【裸polya】

    非常裸的polya,只是我看polya看了非常久 吉大ACM模板里面也有 #include <cstdio> #include <cmath> #include <ios ...

  2. JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe

    JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xfe 在使用Jni ...

  3. 英语发音规则---K字母

    英语发音规则---K字母 一.总结 一句话总结: 1.K发[k]音? kind [kaɪnd] n. 种类 bike [baɪk] n. 自行车 skate [skeɪt] vi. 滑冰 make [ ...

  4. 解决Highcharts指针偏离的问题

    Highcharts 在初始化3D柱状图 时 (注意:3D图形会发生偏移,2D显示正常) 如果加入 shared: true,属性,则可能会导致柱 状图 toolTip提示框偏移,解决方法是去掉或注释 ...

  5. [转自百度贴吧-本人亲测有效]Adobe XD 打开立即闪退问题修复

    出现闪退的原因还是因为缺少C++组件, 下载 DirectXRepairV3.7软件 原文: https://tieba.baidu.com/p/5961511474 软件下载: http://xia ...

  6. 查看md文件

    使用命令将md文件转为html,在浏览器中演示 通过npm安装i5ting_toc 安装好node之后,可以直接使用npm.Windows+R打开运行框,输入cmd,打开命令窗口.连网的情况下,输入如 ...

  7. 关于read函数的一些分析

    ssize_t readn(int fd, std::string &inBuffer, bool &zero) { ssize_t nread = ; ssize_t readSum ...

  8. python之静态属性、类方法、静态方法

    静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的,    静态属性的作用 ...

  9. IOS - ImagePicker 连拍

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)sel ...

  10. HTML中使用 js 添加 data-toggle

    情况:<li class="active"><a href="#server1" data-toggle="tab"> ...