CF232C Doe Graphs
传送门
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相关推荐
- 火焰图(Flame Graphs)的安装和基本用法
火焰图(Flame Graphs) 一.概述: 火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原 ...
- git 裁切_裁切参数设计(DOE试验)
裁切不良改善方案 ( GITO3675DOE 试验) 一.背景 我司现有很多参数都是根据经验按生产效果所制定. 对于现有参数是否最佳 无从判定,因此希望导入 DOE 试验设计对各种参数进行设定. 二. ...
- 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 ...
- 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第二讲)
作者:于媛,十三鸣 本文长度为3300字,建议阅读10+分钟 本文为大家介绍常用的网络属性和经典的网络模型. 标签:机器学习 [ 导读 ]在研究网络的时候,我们往往需要从结构层面对网络进行分析,网络属 ...
- js实现数据结构及算法之图和图算法(Graphs)
图(Graphs) 图由边的集合及顶点的集合组成,每个城市就是一个顶点,每一条道路就是一个边 顶点也有权重,也称为成本.如果一个图的顶点对是有序的,则称之为有向图.在对有向图中的顶点排序后,便可以在两 ...
- doe报告模板_技术漫谈|关于制剂研发过程中的实验设计(DOE)误区讨论
技术漫谈 第01期 关于制剂研发过程中的实验设计(DOE)误区讨论 // 作者:合全药业制剂业务后期项目部 感谢合全药业制剂研发后期团队朱莹.夏彬等同事对本稿件的支持 早在2004-2005年,FDA ...
- guava中 graphs 六
2019独角兽企业重金招聘Python工程师标准>>> guava中 graphs 六 介绍 guava的common.graph 是一个图类型结构的库,也就是实体和他们之间的关系的 ...
- 【转】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 ...
- 【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 ...
最新文章
- CES Asia专题|微鹅展示无线充电,智能手机的无线充电时代何时来临?
- 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- LeetCode Guess Number Higher or Lower II(动态规划)
- 对于非阻塞socket的可写事件
- BAT批量重命名文件擴展名
- find server/ -type d|xargs -I {} echo mkdir /root/{}
- 高性能mysql看不懂_高性能mysql笔记1
- 第一个程序 快速编译链接的办法
- java.util.concurrent.BlockingQueue指南
- MapReduce Python
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。...
- 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day8-面向对象
- linux445端口是什么,端口445怎么关 445端口是什么服务 445病毒是什么
- 条形码扫描仪行业调研报告 - 市场现状分析与发展前景预测
- bryntum gantt 5.0.6
- 基于微服务架构的云平台总体设计
- JDK源码解析---Short
- ORA-39083 ORA-10615
- c语言中的less函数,less的使用-基本语法-编译
- 计算机的r进制,进制转换(十进制转R进制)
热门文章
- [转]struts2处理.do后缀的请求
- java web利用mvc结构实现简单聊天室功能
- MFC,ADO方式实现数据库操作
- C#中接口和方法的运用(Fourteenth Day)
- SPSiteDataQuery
- 混合模式单点登录的实现
- python 手动读取cifar10_Python读入CIFAR-10数据库
- vsftp匿名访问目录_vsftp 匿名访问设置设置
- mysql 索引类型案例_Mysql索引类型与基本用法实例分析
- python中tolist_python - 无法使用Gremlinpython使用“ .toList()”列出Janusgraph中存在的所有顶点 - 堆栈内存溢出...