大概就是要每两个点 只能有一条路径,并且约束,最短的边用来砌墙,那么反之的意思就是最大的边用来穿过

故最大生成树

生成以后 再用lca计算树上两点间的距离

(当然防止生成树是一条链,可以用树的重心作为根) ,然后简单的统计下树上两点的距离就行了

#include <bits/stdc++.h>
using namespace std; const int N = **;
int n, m, sum, fa[N]; struct node {
int u,v,val;
node(){}
node(int uu,int vv,int va):u(uu),v(vv),val(va){}
}E[N]; int etot; int Id(int x,int y) {
return (x-)*m+y;
} int Find(int x) {
return fa[x] == x ? x : fa[x]=Find(fa[x]);
} bool join(int u,int v) {
int fu = Find(u);
int fv = Find(v);
if(fu!=fv) {
fa[fu] = fv;
return true;
}
return false;
} int tot, head[N], nex[N], son[N], dep[N], f[N][];
void add(int u,int v) {
nex[++tot] = head[u];
son[tot] = v;
head[u] = tot;
} void addEdge(int u,int v) {
add(u,v);
add(v,u);
} void dfs(int x,int fa) {
f[x][] = fa;
for(int i=; f[x][i-]; i++) {
f[x][i] = f[f[x][i-]][i-];
}
for(int i=head[x]; i; i=nex[i]) {
if(son[i] != fa) {
dep[son[i]] = dep[x] + ;
dfs(son[i],x);
}
}
}
void Lca(int u,int v) {
if(dep[u] < dep[v])
swap(u,v);
int ans = dep[u]-dep[v];
for(int i=;i>=;i--) {
if(dep[u] - (<<i) >= dep[v])
u=f[u][i];
}
for(int i=;i>=;i--) {
if(f[u][i] != f[v][i])
u=f[u][i], v=f[v][i], ans+=(<<(i+));
}
if(u!=v) ans+=;
printf("%d\n",ans);
} int main ()
{
freopen("in.txt","r",stdin);
scanf("%d %d", &n, &m);
sum=n*m;
for(int i=;i<=n;i++) {
for(int j=;j<=m;j++) {
int x,y; scanf("%*s %d %*s %d", &x, &y);
if(i < n)
E[++etot]=node(Id(i,j), Id(i+,j), x);
if(j < m)
E[++etot]=node(Id(i,j), Id(i,j+), y);
}
}
sort(E+,E++etot,[](node a,node b) {
return a.val > b.val;
});
for(int i=;i<=sum;i++)
fa[i] = i;
for(int i=; i<=etot; i++) {
int u = E[i].u;
int v = E[i].v;
//if(join(u,v))
//addEdge(u,v);
int fu = Find(u), fv = Find(v);
if(fu == fv) continue;
fa[fu] = fa[fv];
addEdge(u,v);
}
dfs(,);
int Q; scanf("%d",&Q);
while (Q--) {
int x1,y1,x2,y2;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
Lca(Id(x1,y1),Id(x2,y2));
}
return ;
}

ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer 最大生成树 lca的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)

    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...

  2. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树,倍增lca)

    https://nanti.jisuanke.com/t/31462 要求在一个矩形中任意选两个点都有唯一的通路,所以不会建多余的墙. 要求满足上述情况下,建墙的费用最小.理解题意后容易想到首先假设全 ...

  3. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)

    https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer

    传送门:https://nanti.jisuanke.com/t/31462 本题是一个树上的问题:结点间路径问题. 给定一个有N×M个结点的网格,并给出结点间建立墙(即拆除边)的代价.花费最小的代价 ...

  5. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  6. 计蒜客 1460.Ryuji doesn't want to study-树状数组 or 线段树 (ACM-ICPC 2018 徐州赛区网络预赛 H)

    H.Ryuji doesn't want to study 27.34% 1000ms 262144K   Ryuji is not a good student, and he doesn't wa ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 B. BE, GE or NE

    In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named &qu ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track

    262144K   Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...

随机推荐

  1. 洛谷P3826 蔬菜 [NOI2017] 贪心

    正解:贪心 解题报告: umm,,,其实我还不会 废话我这么菜怎么可能懂QAQ 先占坑,想学习这题很久了呢QAQ

  2. java实现树状图

    1.定义测试数据类 VirtualDataGenerator: import java.util.ArrayList;import java.util.HashMap;import java.util ...

  3. .NET数据挖掘与机器学习开源框架

    1.    数据挖掘与机器学习开源框架 1.1 框架概述 1.1.1 AForge.NET AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经 ...

  4. 014-Spring Boot web【三】拦截器HandlerInterceptor、异常处理页面,全局异常处理ControllerAdvice

    一.拦截器HandlerInterceptor 1.1.HandlerInterceptor接口说明 preHandle,congtroller执行前,如果返回false请求终端 postHandle ...

  5. 协作工具 discord 和 slack

    discord: https://discordapp.com/ slack: www.slack.com

  6. 高性能mysql第6章

    第6章,优化配置 https://www.cnblogs.com/musings/p/5913157.html 1:服务器读取的配置文件,可以使用下面的命令查询 admin@iZwz92c0zpe8t ...

  7. POJ1258:Agri-Net(最小生成树模板题)

    http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One of hi ...

  8. PAT 1049 Counting Ones[dp][难]

    1049 Counting Ones (30)(30 分) The task is simple: given any positive integer N, you are supposed to ...

  9. iOS开发--底部按钮和应用图标显示未读消息

    我们要实现的效果如下: 我们使用系统自带的,实际上,代码量很少,在我们要显示的按钮上,打上下面一句代码即可: self.tabBarItem.badgeValue = @"1"; ...

  10. Qt addStretch()详解

    addStretch函数,是在布局的时候用到. 函数原型: void QBoxLayout::addStretch ( int stretch = 0 ) 作用:平均分配Layout 比如: QVBo ...