BZOJ 1779. [Usaco2010 Hol]Cowwar 奶牛战争
传送门
考虑构建网络流模型
把一个流量看成一只奶牛的攻击过程,那么答案就是最大流
因为每只奶牛只能操作一波,所以构造分层图,一层相当于一步
第一层就是初始状态,从 $S$ 向所有 $J$ 奶牛连一条流量为 $1$ 的边,表示只有一只 $J$
下一层,表示奶牛走一步后的状态,每只 $J$ 向下一层走一步可以到达的点连流量为 $1$ 的边,当然奶牛可以不走,所以也要向下一层原来的位置连流量为 $1$ 的边
再下一层就可以考虑奶牛攻击了,但是因为每个位置只能站一只奶牛,所以这一层还要再拆成两层,对于点之间连流量为 $1$ 的边,表示一个位置只能站一只奶牛,然后再把所有的 $T$牛 连一条流量为 $1$ 的边到 $T$(汇点),因为一只 $T$牛 只能被打翻一次
最后答案就是最大流
总结一下就是图分成四层,每一步慢慢考虑
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> using namespace std; typedef long long ll; inline int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f; } const int N=1e5+7,M=4e6+7,INF=1e9+7; int fir[N],from[M],to[M],val[M],cntt=1; inline void add(int a,int b,int c) {from[++cntt]=fir[a]; fir[a]=cntt;to[cntt]=b; val[cntt]=c;from[++cntt]=fir[b]; fir[b]=cntt;to[cntt]=a; val[cntt]=0; } int dep[N],Fir[N],S,T; queue <int> q; bool BFS() {for(int i=S;i<=T;i++) Fir[i]=fir[i],dep[i]=0;q.push(S); dep[S]=1; int x;while(!q.empty()){x=q.front(); q.pop();for(int i=fir[x];i;i=from[i]){int &v=to[i]; if(dep[v]||!val[i]) continue;dep[v]=dep[x]+1; q.push(v);}}return dep[T]>0; } int DFS(int x,int mxf) {if(x==T||!mxf) return mxf;int fl=0,res;for(int &i=Fir[x];i;i=from[i]){int &v=to[i]; if(dep[v]!=dep[x]+1||!val[i]) continue;if( res=DFS(v,min(mxf,val[i])) ){mxf-=res; fl+=res;val[i]-=res; val[i^1]+=res;if(!mxf) break;}}return fl; } inline int Dinic() { int res=0; while(BFS()) res+=DFS(S,INF); return res; }int n,m; char s[N]; int main() {n=read(),m=read();scanf("%s",s+1);S=0,T=n*4+1; int a,b;for(int i=1;i<=n;i++){if(s[i]=='J') add(S,i,1),add(i,n+i,1);if(s[i]=='T') add(n*3+i,T,1);else add(n+i,n*2+i,1);}for(int i=1;i<=m;i++){a=read(),b=read();if(s[a]!='T'&&s[b]!='T') add(a,n+b,1),add(b,n+a,1);if(s[a]!='T'&&s[b]=='T') add(n*2+a,n*3+b,1);if(s[b]!='T'&&s[a]=='T') add(n*2+b,n*3+a,1);}printf("%d",Dinic());return 0; }
转载于:https://www.cnblogs.com/LLTYYC/p/10815479.html
BZOJ 1779. [Usaco2010 Hol]Cowwar 奶牛战争相关推荐
- [BZOJ 1778][Usaco2010 Hol]Dotp 驱逐猪猡
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 690 Solved: 269 [Sub ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛
http://www.lydsy.com/JudgeOnline/problem.php?id=1776||http://cogs.pro/cogs/problem/problem.php?pid=8 ...
- [Usaco2010 Hol]cowpol 奶牛政坛
题目描述: 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可 ...
- [Usaco2010 Hol]cowpol 奶牛政坛(入门oj Problem 5274)
第三次发题解哈.有什么表述错误的请见谅(可以提出). 题目源地址:https://www.lydsy.com/JudgeOnline/problem.php?id=1776 文章目录 题目描述 输入 ...
- BZOJ 1778 [Usaco2010 Hol] Dotp 驱逐猪猡
Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44, ...
- bzoj 1778 [Usaco2010 Hol]Dotp 驱逐猪猡
http://www.elijahqi.win/archives/3299 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= ...
最新文章
- c语言图形时钟编程,C语言图形时钟课程设计实验报告.doc
- linux 可执行文件_linux中ELF二进制程序解析
- linux打开应用程序的命令,Windows环境下如何通过命令打开程序!
- python中用*打印一个上三角形和下三角形组成的三角形
- java 打包zip下载_java web 将文件打包成 .zip后 肿么自动弹出下载框提示并下载?
- t-sne原理解释_T-SNE解释-数学与直觉
- 项目管理十大知识领域,为何不含
- excel字体颜色对照表 取值0-63
- 实时录制视频,实时去除人_录制实时演示,第2部分:软件设置
- 电脑位数怎么看_看完了这篇文章你就知道怎么选电脑了...
- 说说WeakReference弱引用
- 王爽《汇编语言》第2版-----2、寄存器
- 揭秘成为最牛程序员的五大要诀
- Python定时爬取微博热搜+pyecharts动态图展示
- android 11.0 12.0Launcher3去掉默认的google搜索栏
- 音频/视频标签的使用
- (附源码)spring boot基于微信小程序的口腔诊所预约系统 毕业设计 201738
- Python将string转换到float的实例方法
- oracle 客户端修复,传授win7系统配置Oracle客户端连接失败的恢复方法
- Java项目:在线车队货车管理系统(java+SSM+JSP+bootstrap+Mysql)
热门文章
- c通过位运算求绝对值_初中数学归类总结(四)有理数的乘除乘方及混合运算...
- leetcode448-Find All Numbers Disappeared in an Array
- 分布式对象存储 读书笔记(一) 开始
- 元素位置及宽度的计算总节
- LintCode Python 简单级题目 491.回文数
- 炎热天气看书还是钓鱼?隐马尔科夫模型教你预测!
- [书目20081126]转型:用对策略,做对事
- java代码隐藏面消除算法,java常面的几种排序算法
- dict过滤 python_小猿圈解析Python开发的技巧都有哪些?
- c语言n次方怎么输入_C语言基本数据类型的思维导图