博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #403(div 2)
阅读量:4929 次
发布时间:2019-06-11

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

A

=w=

B

题意:一个数轴上有n个整点,每个点都有一个速度,选一个点让他们集合,使得时间最少。

分析:

   直接三分

C

题意:给定一棵树,任意两个距离小等于二的点不能染相同的颜色,求最小颜色数和染色方案。 n<=2*10^5

分析:

   容易知道答案就是最大的度数+1

   至于方案直接暴搜出方案就行

D

题意:有n个足球队,每个队有两个选名字的方案,也就是直接给定了两个名字。所有球队不能有相同的名字。特殊的,如果有两个球队第一个名字相同,一个球队选了第二个名字,另一个球队不能选第一个名字。n<=1000

分析:模拟

   按照第一名字为关键字,那些第一名字相同的队伍都只能取第二名字

   对于剩下的集合,考虑那些只能选一个名字的,选择它,并更新当前已选名字

   这样剩余未定集合会越来越小,直至没有

   在这过程中,若有一只队伍两个名字都被占用,那么说明不合法

E

题意:给定一个n个点m条边的连通图,然后你要用k条路径覆盖所有的点,每条路径最多2*n/k向上取整个点,求一个方案。n<=2*10^5

分析:构造

   把其弄成一个树,然后dfs序,会有2*n-1个点,那么每次只需要走2*n/k个点就行了,注意最后可能有剩余走的机会,不能不走,随便走个点

F

题意:给丁一个n点m边的图,然后每条边有一个类别1或者0。

   你要按照给定的顺序走边:一条0的,然后把刚走的取反接起来,然后一直做。比如P代表0,B代表1,那么你要这么走:

   P, PB, PBBP, PBBPBPPB, PBBPBPPBBPPBPBBP, and so on.

   求从1开始最多能走多少条。如果答案>10^18,输出-1   n<=500

分析:bitset+倍增

   还是很吼的思路

   如果只考虑走2的次方步,那么应该是可以倍增出结果的

   对于一般情况,一定是由几个2的次幂构成的,这说明也可以dp求解!

   而且上面两种情况都有一种特点,那就是对于一条路径上的两段不同次幂路,开头一定是不同的,开头一定是0 1 0 1 0 1这种!

   f[i][j][0/1]表示当次幂边的长度<=2^j时候,以i点为起点,0/1为第一条边,能走的最远路

   那么有转移f[i][j][0/1]=max(f[k][j-1][0/1 xor 1]+(1<<j)) (其中i走2^j步可以走到k)

   这个转移的关键就是如何快速知道符合的k,那么很显然要预处理

   很容易想到g[i][j][0/1][k],表示从i点开始,以0/1边为起点,走2^j步,能否走到k点

   至于转移的话,需要枚举一个j-1层的中间点,作为i->j的转移,这样时间复杂度是O(n^3*60)会TLE

   这里就要用到bitset

   bitset<n> g[i][j][0/1] 就表示从i点开始,以0/1边为起点,走2^j步,能到达其他点的情况(1表示可以到达)

   转移的时候就是bitset的或操作,因为是位运算,所以很快

转载于:https://www.cnblogs.com/wmrv587/p/6536454.html

你可能感兴趣的文章
Android 文件的读取和写入
查看>>
机器学习-加权采样算法简介
查看>>
高校表白APP-冲刺第四天
查看>>
outlook 设置163邮箱
查看>>
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
matlab提取caffe模型,深度學習Caffe實戰筆記(10)Windows Caffe使用MATLAB接口提取和可視化特征...
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>
数组转集合踩坑
查看>>
node.js的异步I/O、事件驱动、单线程
查看>>
vue cli3 子目录问题
查看>>
github.com访问慢解决
查看>>
微服务架构最强详解
查看>>
转:哈夫曼树详解
查看>>
.Net Core Identity外面使用Cookie中间件
查看>>
【坐在马桶上看算法】算法1:最快最简单的排序——桶排序
查看>>
C#中泛型之Dictionary
查看>>
强连通分量
查看>>