博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #228 (Div. 1) 388B Fox and Minimal path
阅读量:4350 次
发布时间:2019-06-07

本文共 1048 字,大约阅读时间需要 3 分钟。

链接:

【题意】

      给出一个整数K,构造出刚好含有K条从1到2的最短路的图。

【分析】

      由于是要自己构造图,当然构造的方法很多了,需要考虑简单性和可行性。出于简单考虑,图中从1到2的所有路径都是最短路,为了保证路径长度一样,在构图时就需要分层次,使得每一层的点距离上一层的点的距离都是一个单位。

     那么如何使得路径条数刚好为K呢,这里涉及到相邻层次的点的链接方式。比如说每个点和上一层的所有点都有链接,那么这样总的路径数就是每层点的个数乘起来,但是这很难保证乘起来的值刚好是K,于是想到进制数的方法,可以构造出不同底数的链接模型,最后串联起来,起到相加作用,最后一定能凑成K。好需要注意的是点的个数,如果层次分的少了点的个数就多了,超过限制就错了。

     不过我在这里不用上面那种拼接方式,而是使用种更巧妙地构图,这种图有许多很好的性质,说不定有其它的用途,我就不用文字说明了,看图:

【代码】

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int cnt[100]; 8 long long dp[100]; 9 bool g[1001][1001];10 int k;11 int top;12 void addedge(int a,int b)13 {14 g[a][b]=g[b][a]=true;15 }16 void work(int c)17 {18 vector
fin;19 int p=2,offset;20 while (p<=c)21 {22 int t=top;23 for (;top
=0;--i)33 {34 int t=i-1;35 if (t<0) t=0;36 if ((1<
<=k)37 {38 k-=(1<
>=1;}61 work(c);62 }63 }
View Code

 

转载于:https://www.cnblogs.com/wuminye/p/3538177.html

你可能感兴趣的文章
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
查看>>
lvs,nginx反向代理,虚拟主机
查看>>
jquip,更简洁的代码
查看>>
【OJ】PAT-A解题报告
查看>>
文档语法
查看>>
利用套接字实现进程通信一例
查看>>
linux中shell变量$#,$@,$0,$1,$2的含义解释
查看>>
常用的shell命令整理
查看>>
A Brief Introduction to the Design of UBIFS
查看>>
了解你的Linux系统:必须掌握的20个命令
查看>>
js setInterval 启用&停止
查看>>
knockoutJS学习笔记04:监控属性
查看>>
Linux下启动/关闭Oracle
查看>>
session和cookie的区别
查看>>
oracle 数据库、实例、服务名、SID
查看>>
web.xml文件的作用
查看>>
linux下oracle调试小知识
查看>>
alert弹出窗口,点击确认后关闭页面
查看>>
oracle问题之数据库恢复(三)
查看>>
单点登陆(SSO)
查看>>