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

故最大生成树

生成以后 再用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. AppFog使用

    cd ‘你的应用目录’ af login(之后输入你的邮箱和密码) af update ‘你的应用名’ 相关文档:https://docs.appfog.com/getting-started/af- ...

  2. oracle动态视图(一)stat

    1v$mystat,v$sesstat,v$sysstat是用来分别统计用户级,会话级,系统级信息的. SID                                 NUMBER STATI ...

  3. 【深入理解javascript】this的用法

    引用:this的用法 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了 情况1:构造函数 函数作为构造函数用,那么其中的this就代表它即将new出来的对象.另外 ...

  4. 【剑指offer】替换空格

    一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先 ...

  5. Spark Sort Based Shuffle内存分析

    分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: ...

  6. 5分钟带你入门vuex(vue状态管理)

    如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习 ...

  7. “在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误

    这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...

  8. 我的2015年ccf的解答

    只做了前三个题,在本地调试好了,不知为什么错了,好歹做了那么久,就记录一下了(注:这不是标准答案,只是我给出的解答) 这是第一题的代码: #include<stdio.h> #includ ...

  9. Bus memory attribute

    根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache. ARM cache架构由cache存储器和写缓冲器(write-buffer)组成.其中Write_buff ...

  10. 解决fiddler不能抓取eclipse发出接口请求的问题

    使用eclipse执行接口时,发现在fiddler里面抓不到这些请求. 网上找了很多资料都是让在Eclipse 中设置:Windows > Preferences > Java > ...