ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer 最大生成树 lca
大概就是要每两个点 只能有一条路径,并且约束,最短的边用来砌墙,那么反之的意思就是最大的边用来穿过
故最大生成树
生成以后 再用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的更多相关文章
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)
ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...
- ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树,倍增lca)
https://nanti.jisuanke.com/t/31462 要求在一个矩形中任意选两个点都有唯一的通路,所以不会建多余的墙. 要求满足上述情况下,建墙的费用最小.理解题意后容易想到首先假设全 ...
- ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer
传送门:https://nanti.jisuanke.com/t/31462 本题是一个树上的问题:结点间路径问题. 给定一个有N×M个结点的网格,并给出结点间建立墙(即拆除边)的代价.花费最小的代价 ...
- ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...
- 计蒜客 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 ...
- ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)
传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...
- 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 ...
- ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track
262144K Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...
随机推荐
- AppFog使用
cd ‘你的应用目录’ af login(之后输入你的邮箱和密码) af update ‘你的应用名’ 相关文档:https://docs.appfog.com/getting-started/af- ...
- oracle动态视图(一)stat
1v$mystat,v$sesstat,v$sysstat是用来分别统计用户级,会话级,系统级信息的. SID NUMBER STATI ...
- 【深入理解javascript】this的用法
引用:this的用法 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了 情况1:构造函数 函数作为构造函数用,那么其中的this就代表它即将new出来的对象.另外 ...
- 【剑指offer】替换空格
一.题目: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 二.思路: Python代码,先 ...
- Spark Sort Based Shuffle内存分析
分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: ...
- 5分钟带你入门vuex(vue状态管理)
如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习 ...
- “在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误
这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...
- 我的2015年ccf的解答
只做了前三个题,在本地调试好了,不知为什么错了,好歹做了那么久,就记录一下了(注:这不是标准答案,只是我给出的解答) 这是第一题的代码: #include<stdio.h> #includ ...
- Bus memory attribute
根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache. ARM cache架构由cache存储器和写缓冲器(write-buffer)组成.其中Write_buff ...
- 解决fiddler不能抓取eclipse发出接口请求的问题
使用eclipse执行接口时,发现在fiddler里面抓不到这些请求. 网上找了很多资料都是让在Eclipse 中设置:Windows > Preferences > Java > ...