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. Ubuntu开机报错:could not update ICEauthority file /home/user/.ICEauthority(转载)

    解决方法如下: 一. 代码:sudo chown $USER:$USER /home/$USER/.ICEauthority        sudo chmod 644 /home/$USER/.IC ...

  2. 院校-美国:哈佛大学(Harvard University)

    ylbtech-院校-美国:哈佛大学(Harvard University) 哈佛大学(Harvard University),简称“哈佛”,坐落于美国马萨诸塞州波士顿都市区剑桥市,是一所享誉世界的私 ...

  3. Thread.setDaemon设置说明

    转载地址:http://blog.csdn.net/m13666368773/article/details/7245570 Thread.setDaemon的用法,经过学习以后了解: 1. setD ...

  4. POJ 3185 DFS

    好像可以用高斯消元??? 但是用搜索写 这题就很水了... // by SiriusRen #include <bitset> #include <cstdio> using ...

  5. 利用keytool颁发https证书方法

    1.首先生成私有认证机构 命令:keytool -genkeypair -alias CAname   补充:keytool -list 命令增加 -v 可以查看CA详细信息 2.然后生成私有证书 命 ...

  6. ElementUI 表格表头筛选框的高度设置,超出一定高度,显示滚动条

    最近项目发现一个问题table表头筛选的时候,由于筛选内容过多导致弹出框超出屏幕,并且无法滚动,应急的办法是缩小浏览器显示比例让更多内容显示

  7. 1.Thinkphp入门--框架介绍

    1.Thinkphp款家最早诞生于2006年初,最初名叫fsc,2007年元旦改名thinkphp,由国人自主开发的框架,有中文的文档和社区 2.Tinkphp下载: 官网:http://www.th ...

  8. 懒人npm运行和打包命令

    源码: @echo off&setlocal EnableDelayedExpansion & color 3e :start title npm 常用命令 by:ceet@vip.q ...

  9. php 生成不重复的随机字符串

    md5(uniqid(md5(microtime(true)),true))

  10. 从Dinnr失败看产品市场可行性认知有哪些不足

    对所有互联网创始人来说,在实际创业之前「验证idea的市场可行性」是至关重要的事情,许多人会用访谈的方式询问潜在顾客的意见,本期的就已Dinnr为案例,当初用户访谈结果乐观,实际上线后却无人买单,创办 ...