BZOJ 3732 Network Kruskal+倍增LCA
来源:互联网 发布:sql存储过程是什么 编辑:程序博客网 时间:2024/05/17 07:17
题目大意:给定一个n个点m条边的无向连通图,k次询问两点之间所有路径中最长边的最小值
NOIP2013 货车运输,几乎就是原题。。。只不过最小边最大改成了最大边最小。。。
首先看到最大值最小第一反应二分答案 但是二分答案O(kmlogn)明显做不了 这里我们考虑最小生成树
先生成一棵最小生成树,然后每次询问利用倍增LCA求出路径上的最大权值即可
本蒟蒻居然把LCA写挂了。。。 而且样例还过了。。。 伤不起啊。。。
90%达成 剩下一道刷点啥呢。。。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;struct edge{int x,y,f;bool operator < (const edge &y) const{return f < y.f;}}edges[30300];struct abcd{int to,f,next;}table[30300];int head[15100],tot;int n,m,k;int fa[15100][20],f_max[15100][20],dpt[15100];int belong[15100];int find(int x){if(!belong[x]||belong[x]==x)return belong[x]=x;return belong[x]=find(belong[x]);}void add(int x,int y,int z){table[++tot].to=y;table[tot].f=z;table[tot].next=head[x];head[x]=tot;}void dfs(int x){int i;dpt[x]=dpt[fa[x][0]]+1;for(i=head[x];i;i=table[i].next){if(table[i].to==fa[x][0])continue;fa[table[i].to][0]=x;f_max[table[i].to][0]=table[i].f;dfs(table[i].to);}}int Query(int x,int y){int j,re=0;if(dpt[x]<dpt[y])swap(x,y);for(j=14;~j;j--)if(dpt[ fa[x][j] ]>=dpt[y])re=max(re,f_max[x][j]),x=fa[x][j];if(x==y)return re;for(j=14;~j;j--)if(fa[x][j]!=fa[y][j]){re=max(re,f_max[x][j]);re=max(re,f_max[y][j]);x=fa[x][j];y=fa[y][j];}re=max(re,f_max[x][0]);re=max(re,f_max[y][0]);return re;}int main(){int i,j,x,y;cin>>n>>m>>k;for(i=1;i<=m;i++)scanf("%d%d%d",&edges[i].x,&edges[i].y,&edges[i].f);sort(edges+1,edges+m+1);for(i=1;i<=m;i++){int fx=find(edges[i].x),fy=find(edges[i].y);if(fx!=fy){belong[fx]=fy;add(edges[i].x,edges[i].y,edges[i].f);add(edges[i].y,edges[i].x,edges[i].f);}}dfs(1);for(j=1;j<=14;j++)for(i=1;i<=n;i++)fa[i][j]=fa[ fa[i][j-1] ][j-1],f_max[i][j]=max( f_max[i][j-1] , f_max[ fa[i][j-1] ][j-1] );for(i=1;i<=k;i++){scanf("%d%d",&x,&y);printf("%d\n", Query(x,y) );}}
2 0
- BZOJ 3732 Network Kruskal+倍增LCA
- BZOJ 3732 Network Kruskal+倍增
- BZOJ 3732: Network|Kruskal|Lca
- 倍增LCA(bzoj 3732: Network)
- BZOJ 4144 Dijkstra+Kruskal+倍增LCA
- BZOJ 3732 Network —— 最小生成树 + 倍增LCA
- bzoj 3732(kruskal+LCA)
- BZOJ 3732 Network Kruskal重构树
- 【BZOJ 3732】Network kruskal树
- hdu 3078 Network(lca 倍增)
- BZOJ-1977 次小生成树 Tree 树上倍增LCA+Kruskal+位运算
- BZOJ 1977 Tree 次小生成树 (kruskal st表 倍增lca)
- [BZOJ]3732: Network 最小生成树 LCA
- 洛谷1967货物运输(kruskal+lca倍增)
- CodeVS1519 过路费【Kruskal+倍增求LCA】
- [洛谷 1967]货车运输---kruskal+lca(倍增)+遍历 or kruskal重构树+lca(倍增)
- [BZOJ3732]Network(kruskal+树上倍增)
- BZOJ 3732: Network(最小生成树+倍增)
- 汉澳sinox为什么没有下载源,因为sinox运行unix/linux/windows程序 .
- 安装android x86 模拟器
- BZOJ 1588 HNOI2002 营业额统计 裸Treap .
- 远程桌面黑背景解决办法
- 微机原理与接口技术一
- BZOJ 3732 Network Kruskal+倍增LCA
- 写给刚入行学计算机孩子的一封信 .
- Zigbee标准协议中的对象属性分类
- 无线路由的桥接
- selenium webdriver学习(十五)------------如何处理FirefoxProfile
- PAT 3-04 一元多项式的乘法与加法运算(C语言实现)
- mac系统常用操作
- 搭建Windows下的Android开发环境
- 【BZOJ】【P1109】【POI2007】【堆积木Klo】【题解】【LIS】