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

故最大生成树

生成以后 再用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. python2.X编码

    1.Python文件的编码 在Python文件中,可以在第一或第二行指定文件的编码格式(以注释的形式加),这也是Python语法规定的,见http://www.python.org/peps/pep- ...

  2. 对nodejs的理解(一)

    1.介绍一下事件驱动编程---快餐店点餐. 在基于线程的方式中(thread-based way)你到了柜台前,把你的点餐单给收银员或者给收银员直接点餐,然后等在那直到你要的食物准备好给你.收银员不能 ...

  3. 007-spring cloud gateway-GatewayAutoConfiguration核心配置-RouteDefinition初始化加载

    一.RouteDefinitionLocator 在Spring-Cloud-Gateway的GatewayAutoConfiguration初始化加载中会加载RouteDefinitionLocat ...

  4. GOLANG错误处理最佳方案errors wrap, Defer, Panic, and Recover

    Simple error handling primitives:        https://github.com/pkg/errors Defer, Panic, and Recover:    ...

  5. error.jsp错误页面跳转,统一异常处理

    常见web项目中会用倒计时然后跳转页面来处理异常 error.jsp关键代码: <script language="javascript" type="text/j ...

  6. col-md-1

    .col-md-12 {    width: 100%;  }  .col-md-11 {    width: 91.66666666666666%;  }  .col-md-10 {    widt ...

  7. win10环境下MySql(5.7.21版本)安装过程

    windows10上安装mysql(详细步骤) 2016年09月06日 08:09:34 阅读数:60405 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:201 ...

  8. 软件包管理:rpm命令管理-安装升级与卸载

    严格区分大小写 卸载命令不许再包的目录下执行.

  9. Summary: Depth-first Search(DFS)

    There are generally two methods to write DFS algorithm, one is using recursion, another one is using ...

  10. JQuery中如何使用事件来出发Ajax

    $(document).ready(function(){                $("input[name='customer_name']").keydown(func ...