传送门

Solution:  (不理解时对着图研究一下就清楚啦!!!)

sm[i]为|D(i)|  (x,y,n)为x,y在D(n)中的最短路

已知sm[i-1]+1为D(i)的割点

于是x-y的最短路就可以分为三种情况:

  • x<sm[n-1]+1&&y>=sm[n-1]+1 
  • x<sm[n-1]+1&&y<sm[n-1]+1
  • x>=sm[n-1]+1&&y>=sm[n-1]+1

下面我们就来讨论这三种情况

  • x在图D(n-1)上,y在图D(n-2)上,它们的最短路必过割点sm[n-1]+1

  我们只要分别求解x,y到割点的最短路即可

  y到割点的最短路即为(1,y-sm[n-1],n-2)

  x到割点的最短路却有两种可能 (1,x,n-1)+1或(x,sm[n-1],n-1)+1 这两种情况取小即可

  • x,y都在图D(n-1)上

  一定要注意这里 x-y的最短路并不一定局限于D(n-1) 还有可能经过割点

  所以这里有两种情况:(x,y,n-1)

    又有两种经过割点的方式: (1,x,n-1)+(y,sm[n-1],n-1)+2 和 (1,y,n-1)+(x,sm[n-1],n-1)+2

    同样取小即可

  • x,y都在图D(n-2)上

  是最简单的一种情况啊,为(x,y,n-2)

  但是如果这样子递归下去是会TLE的,所以我们要优化一下

  发现只要求出图D(i)中x,y点到1和sm[i]的最短路就可以了

  于是预处理出就可以了

  d1[i]为(1,x,i) d2[i]为(x,sm[i],i) d3[i]为(1,y,i) d4[i]为(y,sm[i],i)

  pre函数看图研究一下就可以理解啦

  

CODE:

 #include<iostream>
#include<cstdio>
#include<cstring>
#define R register
#define go(i,a,b) for(R int i=a;i<=b;i++)
#define ll long long
#define M 105
using namespace std;
ll rd()
{
ll x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
ll T,n,sm[M],d[M],d1[M],d2[M],d3[M],d4[M];
void pre(ll x,ll nw,ll t1[],ll t2[])
{
if(nw==) return ;
if(nw==) {t1[]=(x==);t2[]=(x==);return ;}
if(x<=sm[nw-])
{
pre(x,nw-,t1,t2);
t1[nw]=min(t1[nw-],t2[nw-]+);
t2[nw]=min(t1[nw-],t2[nw-])+d[nw-]+;
}
else
{
pre(x-sm[nw-],nw-,t1,t2);
t1[nw]=t1[nw-]+;
t2[nw]=t2[nw-];
}
}
ll qy(ll x,ll y,ll nw)
{
if(nw<=) return x!=y;
if(x<sm[nw-]+&&y>=sm[nw-]+) return min(d1[nw-],d2[nw-])+d3[nw-]+;
if(x<sm[nw-]+&&y<sm[nw-]+) return min(qy(x,y,nw-),min(d1[nw-]+d4[nw-],d2[nw-]+d3[nw-])+);
return qy(x-sm[nw-],y-sm[nw-],nw-);
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
T=rd();n=rd();n=min(n,(ll));
sm[]=;sm[]=;d[]=;d[]=;//d[i]表示D(i)的1到sm[i]结点的最短距离
go(i,,n) sm[i]=sm[i-]+sm[i-],d[i]=d[i-]+;n=min(n,(ll));
while(T--)
{
ll x=rd(),y=rd();if(x>y)swap(x,y);
pre(x,n,d1,d2);pre(y,n,d3,d4);
printf("%lld\n",qy(x,y,n));
}
return ;
}

后:

真的没那么难啊 仔细分析细心一点就没有问题啦

然而 我还是调了一晚上qwq 因为longlong 要哭了...

如果哪里不懂一定要问我 因为可能我也不懂那我就要感谢你发现我没懂的地方啦

然后我们可以一起研究啦啦啦

CF232C Doe Graphs的更多相关文章

  1. CodeForces 232C Doe Graphs(分治+搜索)

    CF232C Doe Graphs 题意 题意翻译 \(Doe\)以她自己的名字来命名下面的无向图 \(D(0)\)是只有一个编号为\(1\)的结点的图. \(D(1)\)是只有两个编号分别为\(1\ ...

  2. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  3. Codeforces Round #144 (Div. 2)

    A. Perfect Permutation 奇偶对调. B. Non-square Equation \(s(x)\)不超过200,根据求根公式计算\(x\). C. Cycles 每次新增点时都和 ...

  4. tunning-Instruments and Flame Graphs

    On mac os, programs may need Instruments to tuning, and when you face too many probe messages, you'l ...

  5. Intel® Threading Building Blocks (Intel® TBB) Developer Guide 中文 Parallelizing Data Flow and Dependence Graphs并行化data flow和依赖图

    https://www.threadingbuildingblocks.org/docs/help/index.htm Parallelizing Data Flow and Dependency G ...

  6. 特征向量-Eigenvalues_and_eigenvectors#Graphs

    https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors#Graphs A               {\displaystyle A} ...

  7. UVALive 6508 Permutation Graphs

    Permutation Graphs Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  8. Graphs and Minimum Cuts(Karger's Min-Cut Algorithm)

    Graphs  Two ingredients 1. vertices (nodes) v 2. edges(undirected or directed) Examples: road networ ...

  9. Safari HTML5 Canvas Guide: Creating Charts and Graphs

    Safari HTML5 Canvas Guide: Creating Charts and Graphs Bar graphs are similar to data plots, but each ...

随机推荐

  1. SCRUM 12.03

    第二轮迭代从今天起正式开始了.12月3日,我们举行了一次组会. 第一轮迭代结束时,我们意识到第二轮迭代需要实现的功能主要如下: 在下次迭代的时候实现对多个网站的信息进行比较取最优惠的选择,目前我们劲针 ...

  2. 第三次spring冲刺2

    完成了对错题的收集,和做错题的功能,运用了android自带的SQLite数据库.

  3. Spring所需的Jar包下载

    作者:zhidashang 来源:CSDN 原文:https://blog.csdn.net/zhidashang/article/details/78706027 版权声明:本文为博主原创文章,转载 ...

  4. 小程序开发 js里面array操作的方法列表。

  5. linux客户端WinSCP

    WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件.   这是一个中文版的介绍.从这里链接出去的大多数文 ...

  6. ESLint的使用

    ESLint是在ECMAScript/JavaScript代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误.在许多方面,它和JSLint.JSHint相似,除了少数的例外: ESL ...

  7. Jamie's Contact Groups POJ - 2289(多重匹配 最大值最小化 最大流)

    Jamie's Contact Groups Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 8567   Accepted: ...

  8. Emacs_快捷键列表

    Emacs_快捷键列表 emacs -nw 以终端模式运行emacsLC_CTYPE=zh_CN.UTF-8 emacs C = Control M = Meta = Alt | EscAlt 可以粘 ...

  9. c++11 追踪返回类型

    c++11 追踪返回类型 返回类型后置:使用"->"符号,在函数名和参数列表后面指定返回类型. #define _CRT_SECURE_NO_WARNINGS #includ ...

  10. MT【193】三面角的正余弦定理

    (原题为浙江名校新高考研究联盟2018届第三次联考选择压轴题) 在平面$\alpha$内,已知$AB\perp BC$,过直线$AB,BC$分别作平面$\beta,\gamma$,使得锐二面角$\al ...