传送门

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:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define R register
 5 #define go(i,a,b) for(R int i=a;i<=b;i++)
 6 #define ll long long
 7 #define M 105
 8 using namespace std;
 9 ll rd()
10 {
11     ll x=0,y=1;char c=getchar();
12     while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
13     while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
14     return x*y;
15 }
16 ll T,n,sm[M],d[M],d1[M],d2[M],d3[M],d4[M];
17 void pre(ll x,ll nw,ll t1[],ll t2[])
18 {
19     if(nw==0) return ;
20     if(nw==1) {t1[1]=(x==2);t2[1]=(x==1);return ;}
21     if(x<=sm[nw-1])
22     {
23         pre(x,nw-1,t1,t2);
24         t1[nw]=min(t1[nw-1],t2[nw-1]+2);
25         t2[nw]=min(t1[nw-1],t2[nw-1])+d[nw-2]+1;
26     }
27     else
28     {
29         pre(x-sm[nw-1],nw-2,t1,t2);
30         t1[nw]=t1[nw-2]+1;
31         t2[nw]=t2[nw-2];
32     }
33 }
34 ll qy(ll x,ll y,ll nw)
35 {
36     if(nw<=1) return x!=y;
37     if(x<sm[nw-1]+1&&y>=sm[nw-1]+1) return min(d1[nw-1],d2[nw-1])+d3[nw-2]+1;
38     if(x<sm[nw-1]+1&&y<sm[nw-1]+1) return min(qy(x,y,nw-1),min(d1[nw-1]+d4[nw-1],d2[nw-1]+d3[nw-1])+2);
39     return qy(x-sm[nw-1],y-sm[nw-1],nw-2);
40 }
41 int main()
42 {
43     freopen("1.in","r",stdin);
44     freopen("1.out","w",stdout);
45     T=rd();n=rd();n=min(n,(ll)80);
46     sm[0]=1;sm[1]=2;d[0]=0;d[1]=1;//d[i]表示D(i)的1到sm[i]结点的最短距离
47     go(i,2,n) sm[i]=sm[i-1]+sm[i-2],d[i]=d[i-2]+1;n=min(n,(ll)80);
48     while(T--)
49     {
50         ll x=rd(),y=rd();if(x>y)swap(x,y);
51         pre(x,n,d1,d2);pre(y,n,d3,d4);
52         printf("%lld\n",qy(x,y,n));
53     }
54     return 0;
55 }

View Code

后:

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

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

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

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

转载于:https://www.cnblogs.com/forward777/p/10372248.html

CF232C Doe Graphs相关推荐

  1. 火焰图(Flame Graphs)的安装和基本用法

    火焰图(Flame Graphs) 一.概述: 火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原 ...

  2. git 裁切_裁切参数设计(DOE试验)

    裁切不良改善方案 ( GITO3675DOE 试验) 一.背景 我司现有很多参数都是根据经验按生产效果所制定. 对于现有参数是否最佳 无从判定,因此希望导入 DOE 试验设计对各种参数进行设定. 二. ...

  3. Accurate self-correction of errors inlong reads using de Bruijn graphs LoRMA使用de Bruijn图对长read中的错误

    Accurate self-correction of errors inlong reads using de Bruijn graphs               LoRMA使用de Bruij ...

  4. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第二讲)

    作者:于媛,十三鸣 本文长度为3300字,建议阅读10+分钟 本文为大家介绍常用的网络属性和经典的网络模型. 标签:机器学习 [ 导读 ]在研究网络的时候,我们往往需要从结构层面对网络进行分析,网络属 ...

  5. js实现数据结构及算法之图和图算法(Graphs)

    图(Graphs) 图由边的集合及顶点的集合组成,每个城市就是一个顶点,每一条道路就是一个边 顶点也有权重,也称为成本.如果一个图的顶点对是有序的,则称之为有向图.在对有向图中的顶点排序后,便可以在两 ...

  6. doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论

    技术漫谈 第01期 关于制剂研发过程中的实验设计(DOE)误区讨论 // 作者:合全药业制剂业务后期项目部 感谢合全药业制剂研发后期团队朱莹.夏彬等同事对本稿件的支持 早在2004-2005年,FDA ...

  7. guava中 graphs 六

    2019独角兽企业重金招聘Python工程师标准>>> guava中 graphs 六 介绍 guava的common.graph 是一个图类型结构的库,也就是实体和他们之间的关系的 ...

  8. 【转】Plotting texts as graphs with R and igraph

    原文转自:http://blog.ynada.com/303 I've plotted several word association graphs for this New York Times ...

  9. 【Paper】31_[18]On a Dynamic Extension of the Theory of Graphs

    On a Dynamic Extension of the Theory of Graphs 学英语 定义了 Laplacian Matrix L=D−AL=D-AL=D−A rank(L)=n-1 ...

最新文章

  1. CES Asia专题|微鹅展示无线充电,智能手机的无线充电时代何时来临?
  2. 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  3. LeetCode Guess Number Higher or Lower II(动态规划)
  4. 对于非阻塞socket的可写事件
  5. BAT批量重命名文件擴展名
  6. find server/ -type d|xargs -I {} echo mkdir /root/{}
  7. 高性能mysql看不懂_高性能mysql笔记1
  8. 第一个程序 快速编译链接的办法
  9. java.util.concurrent.BlockingQueue指南
  10. MapReduce Python
  11. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。...
  12. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day8-面向对象
  13. linux445端口是什么,端口445怎么关 445端口是什么服务 445病毒是什么
  14. 条形码扫描仪行业调研报告 - 市场现状分析与发展前景预测
  15. bryntum gantt 5.0.6
  16. 基于微服务架构的云平台总体设计
  17. JDK源码解析---Short
  18. ORA-39083 ORA-10615
  19. c语言中的less函数,less的使用-基本语法-编译
  20. 计算机的r进制,进制转换(十进制转R进制)

热门文章

  1. [转]struts2处理.do后缀的请求
  2. java web利用mvc结构实现简单聊天室功能
  3. MFC,ADO方式实现数据库操作
  4. C#中接口和方法的运用(Fourteenth Day)
  5. SPSiteDataQuery
  6. 混合模式单点登录的实现
  7. python 手动读取cifar10_Python读入CIFAR-10数据库
  8. vsftp匿名访问目录_vsftp 匿名访问设置设置
  9. mysql 索引类型案例_Mysql索引类型与基本用法实例分析
  10. python中tolist_python - 无法使用Gremlinpython使用“ .toList()”列出Janusgraph中存在的所有顶点 - 堆栈内存溢出...