/*codevs 1519 过路费 最小生成树+倍增*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100010
#define inf 0x3f3f3f3
using namespace std;
int n,m,q,num,head[maxn],fa[maxn][],mx[maxn][],c[maxn],father[maxn];
struct node{
int v,t,pre;
}e[maxn*];
struct edge{
int u,v,t;
bool operator < (const edge &x) const {
return t<x.t;
}
}p[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int max(int x,int y){
return x>y?x:y;
}
void swap(int &x,int &y){
int z=x;x=y;y=z;
}
int find(int x){
if(father[x]!=x)father[x]=find(father[x]);
return father[x];
}
void Add(int from,int to,int dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
void Dfs(int now,int from,int dep,int D){
fa[now][]=from;c[now]=dep;mx[now][]=D;
for(int i=head[now];i;i=e[i].pre){
int v=e[i].v;
if(v==from)continue;
Dfs(v,now,dep+,e[i].t);
}
}
void Get_fa(){
for(int j=;j<=;j++)
for(int i=;i<=n;i++){
fa[i][j]=fa[fa[i][j-]][j-];
mx[i][j]=max(mx[i][j-],mx[fa[i][j-]][j-]);
}
}
int LCA(int a,int b){
int ret=;
if(c[a]<c[b])swap(a,b);
int t=c[a]-c[b];
for(int i=;i<=;i++)
if(t&(<<i)){
ret=max(ret,mx[a][i]);
a=fa[a][i];
}
if(a==b)return ret;
for(int i=;i>=;i--)
if(fa[a][i]!=fa[b][i]){
ret=max(ret,mx[a][i]);
ret=max(ret,mx[b][i]);
a=fa[a][i];b=fa[b][i];
}
ret=max(ret,mx[a][]);//是mx不是fa!!
ret=max(ret,mx[b][]);
return ret;
}
int main()
{
n=init();m=init();
int u,v,t;
for(int i=;i<=n;i++)
father[i]=i;
for(int i=;i<=m;i++){
p[i].u=init();p[i].v=init();p[i].t=init();
}
sort(p+,p++m);
int tot=;
for(int i=;i<=m;i++){
int r1=find(p[i].u);
int r2=find(p[i].v);
if(r1!=r2){
father[r2]=r1;tot++;
Add(p[i].u,p[i].v,p[i].t);
Add(p[i].v,p[i].u,p[i].t);
}
if(tot==n-)break;
}
Dfs(,,,);Get_fa();
q=init();
while(q--){
u=init();v=init();
t=LCA(u,v);
printf("%d\n",t);
}
return ;
}

codevs 1519 过路费 最小生成树+倍增的更多相关文章

  1. Codevs 1519 过路费(Mst+Lca)

    1519 过路费 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,-,n. ...

  2. codevs 1519 过路费

    时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府 ...

  3. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  4. BZOJ3732Network——kruskal重构树+倍增+LCA/最小生成树+倍增

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

  5. 【CodeForces】827 D. Best Edge Weight 最小生成树+倍增LCA+并查集

    [题目]D. Best Edge Weight [题意]给定n个点m条边的带边权无向连通图,对每条边求最大边权,满足其他边权不变的前提下图的任意最小生成树都经过它.n,m<=2*10^5,1&l ...

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

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

  7. 训练指南 UVA - 11354(最小生成树 + 倍增LCA)

    layout: post title: 训练指南 UVA - 11354(最小生成树 + 倍增LCA) author: "luowentaoaa" catalog: true ma ...

  8. 【bzoj4242】水壶 BFS+最小生成树+倍增LCA

    题目描述 JOI君所居住的IOI市以一年四季都十分炎热著称. IOI市是一个被分成纵H*横W块区域的长方形,每个区域都是建筑物.原野.墙壁之一.建筑物的区域有P个,编号为1...P. JOI君只能进入 ...

  9. codevs1519 过路费(最小生成树+LCA)

    1519 过路费  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2 ...

随机推荐

  1. Welcome to JimmyCheung's blog!

    博客开通,写写学习笔记,写写心情,写写生活中的点点滴滴~ 有钱的捧个钱场嘞,没钱的贡献个点击量,新鲜的博客出炉咯,来五毛钱的博文呗~ By Jimmy 2014.09.16

  2. babun,windows shell

    babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell. babun的几个特点: 使用bab ...

  3. iOS出现 Undefined symbols for architecture armv7 std::basic_string<char, std::char_traits<char>

    Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ...

  4. Angular 2 npm start 报错

    首先, index.html 和styles.css是和app目录平级的, 不要扔到里面去, 否则会404 确认配置文件齐全, 路径都正确之后 npm start What?! 照着快速起步也会弄错吗 ...

  5. ZOOKEEPER在CENTOS6上的再安装

    作DUBBO时,肯定是需要的,,对的,,DUBBO也要熟悉一下才行啦.. URL: http://www.centoscn.com/CentosServer/test/2015/0120/4531.h ...

  6. Ubuntu下su:authentication failure的解决办法

    $ su - rootPassword: su: Authentication failureSorry. 这时候输入 $ sudo passwd rootEnter new UNIX passwor ...

  7. SSH自定义标签

     一.标签处理类:package cn.conris.sys.form; import java.io.IOException; import java.util.Enumeration; impor ...

  8. git日志的查看与修改

    1.命令行中查看日志 git log 默认是显示所有的日志信息,之前出来的界面显示的日志,很少. 最后发现,只需要使用键盘上向下键↓,就可以继续浏览更多的日志 空格键,可以翻页浏览日志. 向左←  向 ...

  9. Defining as a "long" or "int" type throws an error on startup

    solr启动时候,报如下异常: [java] view plaincopy SEVERE: org.apache.solr.common.SolrException          at org.a ...

  10. winphone 开发学习笔记(1)

    学习了winphone task 1.首先根据自己电脑下载sdk,,,win 7和win 8的Sdk安装包不一样, http://www.microsoft.com/en-hk/download/de ...