jzoj6094
题目描述
给定一个循环流(每个点均满足流量平衡条件),这个循环流有$n$个点,且每条边的流量只有 $1$ 或$ 2$,其中$a$条边流量为$1$,$b$条边流量为$2$,判断是否存在一个流满足上述条件.
多组数据,其中$T\leq127749$,$2\leq n\leq50$,$a,b\leq50$.
比赛记录
比赛的时候一直在想这道题,想到了一个结论,就是一个这样的合法的流一定是由若干个简单环拼在一起,于是就写了一个暴力,但是由于对题目理解的不够深,导致我判断一个$(a,b)$状态是否可以构成一个简单环时出现了问题,于是暴力凉凉
题目解析
因为是循环流,所以显然一个合法的流网络是由若干个简单环拼接成的,这些简单环有点或边相交,我们可以构造一个简单dp,令$f[i][j][k]$表示$i$条流量为$1$的边,$j$条流量为$2$的边是否可以构成一个有$k$个节点的循环流,考虑转移
$$
f[i][j][k] = f[a][b][c] \& f[d][e][f] \ 其中a+b=i,b+e=j,c<=k,f<=k,c+f-1>=k
$$
这个dp复杂度是$O(n^7)$的.
考虑如下优化:
1.若$i+j <k$,$f[i][j][k]$显然不合法.
2.若$f[i][j][k]$合法,则$f[i+2*l][j-l][k]$也合法.
3.将$f$前缀和,可以少枚举一维.
经过如下玄学优化,可以通过本题.
另外讲一下如何判定$i$条流量为$1$,$j$条流量为$2$的边是否能构成一个长度为$k$的环的循环流.
因为我们知道假如我们固定了让每一条边都从$i$流向$i+1$,那么就很好判断这个状态是否合法,但我们其实可以将一条流量流量为$2$的边和一条流量为$1$的边捆绑变成一条流量为$1$的边,于是我们枚举有多少条边捆绑在一起,暴力判断即可.
更加高明的做法
首先$n=2$特判,对于$n \geq 3$时,我们可以直接判断出解的情况
1.若$i+j<k$,显然不合法.
2.若$i=1$,不合法,因为若流出一点的流量是奇数,那么流入这个点的流量也需要是奇数,所以至少需要$2$条.
3.若$i+j=k$,若$i=n$或$j=n$,则合法,否则不合法,因为只有$k$条边所以只能构成一个简单环,所以当$i \neq n$或$j \neq n$时,构成的环不合法.
4.若$i+j>k$,且$i\neq1$,那么一定合法
考虑证明第四条结论
首先,当$n=3$时,我们可以简单构造证明该结论成立.
对于$n\geq 3$,假设第四条结论对$k=n-1$成立,当$k=n$时,当$i=0$或$j=0$时显然成立,当$i,j>0$时,由第二条结论知道$i>1$,因此$(i-1,j)$对于$k=n-1$成立,因为$i-1>0$,所以我们有至少一条流量为$1$的边,假设这条边由$x$指向$y$,那么我们可以把这条边去掉,加上$(x,k)$,和$(k,y)$这两条边,显然这样依然满足条件,所以结论成立
jzoj6094的更多相关文章
随机推荐
- Nginx-初见
目录 产品出现瓶颈? 什么是Nginx? Nginx作用 正向代理 反向代理 负载均衡策略(Nignx) 轮询 加权轮询 IP hash 动静分离 参考链接 产品出现瓶颈? 项目刚刚上线的时候,并发量 ...
- DataGridView高度自动调整
AutoResizeGrid.cs代码 /// <summary> /// 根据行数据,自动调整DataGridView高度 /// </summary> public sea ...
- NIO.2中Path,Paths,Files类的使用
Java NIO Java NIO概述 Java NIO(New IO(新io),Non-Blocking IO(非阻塞的io))是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的 ...
- PHP设计模式之备忘录模式
备忘录,这个名字其实就已经很形象的解释了它的作用.典型的例子就是我们原来玩硬盘游戏时的存档功能.当你对即将面对的大BOSS有所顾虑时,一般都会先保存一次进度存档.如果挑战失败了,直接读取存档就可以恢复 ...
- PHP怎么遍历对象?
对于php来说,foreach是非常方便好用的一个语法,几乎对于每一个PHPer它都是日常接触最多的请求之一.那么对象是否能通过foreach来遍历呢? 答案是肯定的,但是有个条件,那就是对象的遍历只 ...
- Shell系列(5)- 输出输入重定向及wc命令
输出重定向: 在Linux当中,0代表输入:1代表正确输出:2代表错误输出 类型 符号 作用 正确输出重定向 命令 > 文件 以覆盖得方式,把命令得正确输出,输出到指定文件或设备当中 命令 &g ...
- Shell系列(13)- read
前言 作用是往脚本中传递参数,之前文章的位置参数变量也有此功能,但是只适用于脚本的作者,为什么?第三方用户不知道这个脚本要传递哪些参数,这些参数分别是什么.本篇随笔read就可以实现上述功能,别且该命 ...
- lightweight openpose 入门实操笔记(pytorch环境)
最近有个小项目要搞姿态识别,简单调研了一下2D的识别: 基本上是下面几种 (单人)single person 直接关键点回归 heatmap,感觉其实就是把一个点的标签弄成一个高斯分布 (多人)mul ...
- delete,drop,truncate 区别
今天看到一篇关于delete.drop.truncate区别的文章,认为写得非常好,转过来. 打比方很形象. delete,drop,truncate 都有删除表的作用,区别在于: 1.delete ...
- sqlalchemy 查询结果转json个人解决方案
参考了网上很多资料,自己搞了一个适合的 在model 内增加一个函数: class User(db.Model): __tablename__ = 'user' userid = db.Column( ...