11.04Test

查看请点个赞

转载请注明出处(不然)

题目 描述 做法
\(BSOJ5143\) 要求给\(M\)个通道染色,使得同色通道不能相交 转为矛盾模型,\(2-sat\)or二分图染色解决
\(BSOJ5145\) 多次加边,维护两点所在点双联通分量大小 \begin{cases}在线:LCT+并查集\离线:直接用并查集来"缩点"\end{cases}
\(BSOJ4932\) 用\(m\)色染\(n\)格子:求染出结果方案数 以匹配数为状态设计\(dp\)再改设状态中点为色块

\(\text{Day1}\)

\(T1\)

n个天使排成一条直线,某些天使之间需要互相联系,他们之间的通讯可以通过黑白两种通道中的一种;所有通道必须在直线同侧(另一侧是地面);为了保证通讯效率,同种颜色的所有通道之间不能相交。请计算能否建立这种通讯方案。

转问题为矛盾模型:相交的两个区间颜色必须不同

因此用\(2-sat\)和二分图染色均可

注意图可以不连通

\(T2\)

在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。

  但是,组成联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径。

  为了壮大联盟的队伍,这些星球将建设P条新的太空隧道。这P条新隧道将按顺序依次建成。一条新轨道建成后,可能会使一些星球属于同一个联盟。你的任务是计算出,在一条新隧道建设完毕后,判断这条新轨道连接的两个星球是否属于同一个联盟,如果属于同一个联盟就计算出这个联盟中有多少个星球。

这里着重讲离线

首先什么时候输出\(No\)

是在询问中一条边合并两个不连通集合

因此我们考虑一次把所有边加进去,当他可以合并两个集合时才真加

那么最后被加进去的询问边就是这样的合并两个不连通集合的边

因为在它之前没有边做到这一点

然后一条边联通现在点双联通分量形成的树上路径

然后把这条路径上的点缩成一个点双联通分量

这个可以用并查集实现

inline void Merge(re int x,re int y){
x=getf(x);y=getf(y);
while(x!=y){
if(dep[x]<dep[y])swap(x,y);
size[getf(rt[x])]+=size[x];x=fa[x]=fa[rt[x]];//向上合并
}
}

\(T3\)(JZOJ6303)

考虑颜色按顺序覆盖是什么意思

那就是一种颜色可以连着出现一段,中间包住一些颜色,然后后面出现一段

但注意,如果\(A\)颜色第一次出现的位置比\(B\)颜色的早,那么\(A\)颜色最后一次出现的位置比\(B\)颜色的晚(类似一个颜色栈)

因此我们在\(dp\)设计中加入一维\(k\)表示栈中还剩\(k\)中颜色或者还剩\(k\)中元素可以延续(注意一点:只要有颜色这个值就$\ge$1)

设\(\displaystyle{dp_{i,j,k}}\)表示有\(i\)个点,\(j\)种颜色曾进过栈,栈中还剩\(k\)中颜色

则\(dp_{i,j,k}\)可以由以下这些状态转移来

\[\begin{cases}dp_{i-1,j,k}&表示扩展一格最后的那种颜色(不结束)\\dp_{i-1,j,k+1}&表示用一个栈内元素(不一定相邻)来结尾这个颜色(出栈)\\dp_{i-1,j-1,k-1}&表示新开一个颜色,并且入栈(以后继续扩展)\\dp_{i-1,j-1,k}&表示新开一个颜色,不入栈(只用这一次)\end{cases}
\]

结合上元素选取的方案

自己推式子!!!

\(dp_{i,j,k}=dp_{i-1,j,k}+dp_{i-1,j,k+1}+(m-j+1)\times(dp_{i-1,j-1,k-1}+dp_{i-1,j-1,k})\)

考虑瓶颈在于第一句话\(dp_{i,j,k}=dp_{i-1,j,k}\)继承连续一段的信息,而其他均为新开或结束一段

复杂度为\(O(nm^2)\)

因此段和点实际上是等价

因此不如改状态为设\(\displaystyle{dp_{i,j,k}}\)表示有\(i\)个段(连续颜色),\(j\)种颜色曾进过栈,栈中还剩\(k\)中颜色

那么因为段数\(\le 2m\)

复杂度为\(O(m^3)\)

\(dp_{i,j,k}=dp_{i-1,j,k+1}+(m-j+1)\times(dp_{i-1,j-1,k-1}+dp_{i-1,j-1,k})\)

不放代码了,因为初始条件总该自己推把

11.04Test的更多相关文章

  1. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  2. WinForm 天猫2013双11自动抢红包【源码下载】

    1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...

  3. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  4. CSS垂直居中的11种实现方式

    今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...

  5. C++ 11 多线程--线程管理

    说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...

  6. CSharpGL(11)用C#直接编写GLSL程序

    CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...

  7. ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...

  8. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  9. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

随机推荐

  1. ACM | 算法 | 快速幂

    目录 快速幂 快速幂取模 矩阵快速幂 矩阵快速幂取模 HDU1005练习 快速幂 ​ 幂运算:\(x ^ n\) ​ 根据其一般定义我们可以简单实现其非负整数情况下的函数 定义法: int Pow ( ...

  2. selenium firefox 内存 速度优化

    selenium firefox 内存 速度优化 2 23 profile = webdriver.FirefoxProfile() 2 24 profile.set_preference(" ...

  3. js 对象克隆方法总结(不改变原对象)

    1.通用对象克隆: function clone(obj){ let temp = null; if(obj instanceof Array){ temp = obj.concat(); }else ...

  4. FFMPEG SDK 开发介绍(原创)

    来源:http://blog.sina.com.cn/s/blog_62a8419a01016exv.html 本文是作者在使用ffmpeg sdk开发过程中的实际经验,现在与大家分享,欢迎学习交流. ...

  5. 微服务spring-cloud 学习第一天

    了解微服务     微服务架构风格是一种将单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常使用HTTP).这些服务围绕业务能力构建并且可通过自动部署 ...

  6. org.apache.catalina.core.StandardService - Stopping service [Tomcat]

    今天在启动springboot项目突然启动失败,但是在测试日志文件,以为是日志出错,下面这个是logback打印的异常信息. 2019-05-30 15:09:10.686 [restartedMai ...

  7. echarts地图 绘制部分上海市公交线路数据

    源代码地址 https://github.com/a1115040996/MyHTML/blob/gh-pages/echarts/roadMap.html 预览地址 https://a1115040 ...

  8. CR TubeGet 0.9.2.7,YouTube&全网视频终极下载

    数十次迭代,终于功能完善,在youtube-dl原生支持基础之上,自写解析器脚本,实现对其它主流网站视频下载支持. 加入对视频播放列表.缩略图.字幕下载支持,甚至于自定义列表设计.加密视频下载. 支持 ...

  9. 捕获Ctrl + C中断 优雅的退出程序 golang

    捕获Ctrl + C中断 优雅的退出程序 Gracefully terminate a program in Go os/signal 来捕获系统中断等信号 // Notify方法将signal发送到 ...

  10. linux 使用ssh-keygen生成ssh公钥和私钥

    linux一般为在自己的家目录下建立 .ssh 文件夹 中生成密钥 /home/username/.ssh 生成的命令如下: ssh-keygen -t rsa -C "yourname@y ...