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=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e5+,M=4e6+,INF=1e9+;
int fir[N],from[M],to[M],val[M],cntt=;
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]=;
}
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]=;
q.push(S); dep[S]=; 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]+; q.push(v);
}
}
return dep[T]>;
}
int DFS(int x,int mxf)
{
if(x==T||!mxf) return mxf;
int fl=,res;
for(int &i=Fir[x];i;i=from[i])
{
int &v=to[i]; if(dep[v]!=dep[x]+||!val[i]) continue;
if( res=DFS(v,min(mxf,val[i])) )
{
mxf-=res; fl+=res;
val[i]-=res; val[i^]+=res;
if(!mxf) break;
}
}
return fl;
}
inline int Dinic() { int res=; while(BFS()) res+=DFS(S,INF); return res; } int n,m;
char s[N];
int main()
{
n=read(),m=read();
scanf("%s",s+);
S=,T=n*+; int a,b;
for(int i=;i<=n;i++)
{
if(s[i]=='J') add(S,i,),add(i,n+i,);
if(s[i]=='T') add(n*+i,T,);
else add(n+i,n*+i,);
}
for(int i=;i<=m;i++)
{
a=read(),b=read();
if(s[a]!='T'&&s[b]!='T') add(a,n+b,),add(b,n+a,);
if(s[a]!='T'&&s[b]=='T') add(n*+a,n*+b,);
if(s[b]!='T'&&s[a]=='T') add(n*+b,n*+a,);
}
printf("%d",Dinic());
return ;
}
BZOJ 1779. [Usaco2010 Hol]Cowwar 奶牛战争的更多相关文章
- bzoj1779 [Usaco2010 Hol]Cowwar 奶牛战争(网络流)
1779: [Usaco2010 Hol]Cowwar 奶牛战争 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 302 Solved: 131[Sub ...
- bzoj:1776: [Usaco2010 Hol]cowpol 奶牛政坛
Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...
- bzoj 1776: [Usaco2010 Hol]cowpol 奶牛政坛——树的直径
农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可以抵达其他所 ...
- BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 LCA + 树的直径
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- 【BZOJ1776】[Usaco2010 Hol]cowpol 奶牛政坛 树的直径
[BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N. ...
- [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca
[Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...
- BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡
1778: [Usaco2010 Hol]Dotp 驱逐猪猡 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 563 Solved: 216[Submi ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- 【树形DP/搜索】BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
1827: [Usaco2010 Mar]gather 奶牛大集会 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 793 Solved: 354[Sub ...
随机推荐
- 关于正则表达式RegExp
常用元字符串 元字符 说明 \d 匹配 数字 \D 匹配 非数字 \w 匹配 数字,字母,下划线 \W 匹配 任意不是字母,数字,下划线 \s 匹配 空白符 \S 匹配 任意不 ...
- elasticsearch 深入 —— 地理位置
地理位置 我们拿着纸质地图漫步城市的日子一去不返了.得益于智能手机,我们现在总是可以知道 自己所处的准确位置,也预料到网站会使用这些信息.我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范 ...
- windows server 2008R2 配置tomcat服务开机自启动
一.配置环境 操作系统:Windows server 2008 R2 软件包:jdk_1.7.rar 二.安装操作 1,右击解压jdk_1.7.rar:解压后双击运行jdk-7u79-windows- ...
- 一、Iframe
一.Iframe 自适应iframe的高 <!-- frameborder :设置iframe的边框 scrolling:设置iframe的滚动条 src:设置iframe的路径 onload: ...
- Codeforces Round #394 (Div. 2) - C
题目链接:http://codeforces.com/contest/761/problem/C 题意:给定n个长度为m的字符串.每个字符串(字符串下标从0到m-1)都有一个指针,初始指针指向第0个位 ...
- Jmeter —— Test Fragment (测试片段)
Test Fragment(测试片段) 1. 概念 JMeter中的Test Fragent:是控制器上一种特殊的线程组:它在测试树上与线程组处于同一个层级.但是使用的时候需要和Include ...
- 什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)
本节知识点是<编译原理>第三章-词法分析,学习参考教材为清华大学出版社<编译原理>第三版: 前情提要: 字母表∑1和∑2的乘积( product): ∑1∑2 ={ab|a ∈ ...
- SpringBoot---注册Servlet,Filter,Listener
1.概述 1.1.当使用 内嵌的Servlet容器(Tomcat.Jetty等)时,将Servlet,Filter,Listener 注册到Servlet容器的方法: 1.1.1.直接注册Bean ...
- hdu 5964:平行四边形 【计算几何】
打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...
- Linux系统重要文件
Linux系统重要文件介绍与配置 一网卡配置文件 (一)网卡配置文件参数介绍 文件路径信息:/ec/sysconfig/network-scripts/ifcfg-eth0 文件作用说明:配置网卡地址 ...