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的更多相关文章
随机推荐
- python模块--__future__(向上兼容模块)
py2.7 unicode_literals 将字符串默认视为unicode, 即u'xxx'和'xxx'将是一样的, 而再想表示字节需用b'xxx'表示 division / 将表示正常除法操作 ...
- 三剑客之awk 逐行读取
目录: 一.awk工作原理 二.按行输出文本 三.按字段输出文本 四.通过管道,双引号调用shall命令 五.CPU使用率 六.使用awk 统计 httpd 访问日志中每个客户端IP的出现次数 一.a ...
- git实战-linux定时监控github更新状态(二)
系列文章 git介绍-常用操作(一)✓ git实战-linux定时监控github更新状态(二)✓ 本文主要内容 如何查看github的本地仓库和远程仓库的同步情况 linux服务器定时监控githu ...
- Nginx系列(3)- 负载均衡
负载均衡 Nginx提供的负载均衡策略有两种: 内置策略为轮询.加权轮询.ip hash 扩展策略,就天马行空了,只有你想不到的没有它做不到的 轮询 加权轮询(根据权重来) iphash对客户端请求 ...
- Django3.2边学边记—Adimn站点管理
准备工作 创建管理员的用户名和密码: python manage.py createsuperuser 根据提示创建用户名 密码 在admin.py中注册模型类 from django.contrib ...
- setTimeout 与setInterval的区别
setTimeout(code,millisec) 方法用于在指定的毫秒数后调用函数或计算表达式 setInterval(code,millisec) 方法可按照指定的周期(以毫秒计)来调用函数或计算 ...
- 安卓模拟器genymotion安装
上一篇已经讲了appium的搭建.那么搭建好后,我们需要测试不同机型,这个时候除了真机外,可以选择安装模拟器.市面上的模拟器有很多:夜神.逍遥.mumu.android emulator.genymo ...
- urllib2获取CGI请求的数据
import urllib.request as urllib2 headers = { 'Authorization': 'Basic YWRtaW46YWRtaW4=', }#需要身份验证时,在请 ...
- english note(6.3 to 6.8)
6.3 http://www.51voa.com/VOA_Special_English/pakistan-town-struggles-with-rise-in-hiv-infections-821 ...
- POJ3734-Blocks【EGF】
正题 题目链接:http://poj.org/problem?id=3734 题目大意 用思种颜色给\(n\)个格子染色,要求前两种颜色出现偶数次,求方案. \(1\leq T\leq 100,1\l ...