【usaco】patrol
很长时间都没想出来的简单题,看了题解才写出来,还是naive
原题:
FJ有个农场,其中有n块土地,由m条边连起来。FJ的养牛场在土地1,在土地n有个新开张的雪糕店。Bessie经常偷偷溜到雪糕店,当Bessie去的时候,FJ就要跟上她。但是Bessie很聪明,她在从雪糕店返回时不会经过去雪糕店时经过的农场,因此FJ总是抓不住Bessie。
为了防止Bessie生病,FJ决定把一些诚实的狗放在一些土地(1和n除外)上,使Bessie无法在满足每块土地最多只经过一次的条件的情况下,从养牛场溜到雪糕店然后又溜回养牛场。
求出FJ最少要放多少只狗。数据保证1和n间没有直接的连边。
n<=1000,m<=10000。
拆点来控制每个点只经过一次
先搞一个从源到汇每个点只经过一次的最小割,然后这个最小割-1,就是答案,似乎因为少拦一个点就相当于放开了另一条回去的路?
图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通图不一定连通
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int oo=;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
struct ddd{int next,y,value,fan;}e[];int LINK[],ltop=;
inline void insert(int x,int y,int z){
e[++ltop].next=LINK[x];LINK[x]=ltop;e[ltop].y=y;e[ltop].value=z;e[ltop].fan=ltop+;
e[++ltop].next=LINK[y];LINK[y]=ltop;e[ltop].y=x;e[ltop].value=;e[ltop].fan=ltop-;
}
int n,m;
int s=,t;
int level[];
int dui[],tou=;
bool get_level(){
memset(level,-,sizeof(level));
dui[tou=]=s; level[s]=;
for(int k=;k<=tou;k++)
for(int i=LINK[dui[k]];i;i=e[i].next)if(e[i].value && level[e[i].y]==-){
dui[++tou]=e[i].y;
level[e[i].y]=level[dui[k]]+;
}
return level[t]!=-;
}
int get_maxflow(int x,int y){
if(x==t) return y;
int maxflow=,flow=;
for(int i=LINK[x];i;i=e[i].next)if(e[i].value && level[e[i].y]==level[x]+)
if(flow=get_maxflow(e[i].y,min(y-maxflow,e[i].value))){
maxflow+=flow;
e[i].value-=flow,e[e[i].fan].value+=flow;
}
if(!maxflow) level[x]=-;
return maxflow;
}
int dinic(){
int flow,bowl=;
while(get_level())
while(flow=get_maxflow(s,oo))
bowl+=flow;
return (bowl) ? bowl : ;//注意图有可能不连通!!!
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
t=n*+;
int _left,_right;
insert(s,,oo),insert(n+n,t,oo);
for(int i=;i<n;i++) insert(i,i+n,);
insert(,+n,oo),insert(n,n+n,oo);
while(m --> ){
_left=read(),_right=read();
insert(_left+n,_right,oo),insert(_right+n,_left,oo);
}
cout<<dinic()-<<endl;
return ;
}
【usaco】patrol的更多相关文章
- POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)
POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...
- 1642: 【USACO】Payback(还债)
1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...
- 1519: 【USACO】超级书架
1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...
- Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
[USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...
- 【CPLUSOJ】【USACO】【差分约束】排队(layout)
[题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...
- 【USACO】Dining
[题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...
- 【USACO】Optimal Milking
题目链接 : [POJ]点击打开链接 [caioj]点击打开链接 算法 : 1:跑一遍弗洛伊德,求出点与点之间的最短路径 2:二分答案,二分”最大值最小“ 3.1:建边,将 ...
- 【USACO】 Balanced Photo
[题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...
- 【USACO】 Balanced Lineup
[题目链接] 点击打开链接 [算法] 这是一道经典的最值查询(RMQ)问题. 我们首先想到线段树.但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解. 稀疏表算法.其实也是一种动态 ...
随机推荐
- error: unknown field 'ioctl' specified in initializer
error message: 原因: 从2.6.36开始,file_operations结构发生了重大变化 具体看 xx../include/linux/fs.h定义: 取消了原先的 int (*i ...
- ASIHTTPRequest 在release(打包)模式下数据获取或post失败问题
ASIHTTPRequest 在relase模式下失效 表现为,调用网络请求后没有任何反应 原因之一: ARC模式下,在ASIHTTPRequest 前面会加上__weak来解决循环应用,这个__we ...
- JVM-对象的存活与死亡
当Java虚拟机进行垃圾收集的时候,那么它必须要先判断对象,是否还存活,如果存活就不能对它进行回收.所以判断一个对象是否存活是Java虚拟机必须要实现的. 1.对象是否存活 1)引用计数器:给对象添加 ...
- 安装xampp后,遇到的各种问题
一.apache无法启动 1.查看端口是否被占用 80端口冲突,解决方法:打开目录C:\xampp\apache\conf(我的安装目录为C:\xampp)下的httpd.conf文件,将Listen ...
- jQuery 常用动画
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 理解NSTypesetter 和 NSATSTypesetter
先说通常意义上的typeset(排字.排版),然后再说NSTypesetter 和 NSATSTypesetter,最后是它们的区别. Typesetting is the composition o ...
- (转)深入理解javascript的function
原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的fu ...
- linux下解决端口被占用的问题
以端口9877为例,先查看是否有进程占用该端口 netstat -tln | grep 9877 然后查看占用该端口的进程的进程id lsof -i :9877 最后kill 命令结束该进程: kil ...
- N的阶乘的长度
阶乘是乘法 , 乘法的话 , 几位数*几位数的位数 就是 哪两个几位数相加 . 这个可以用log10来解决 , 所以有如下代码 . #include<stdio.h> #include& ...
- 如何解决火狐FF里Input标签刷新页面后 仍然保存之前输入的内容的方法。
直接在input 标签里 增加 autocomplete="off".火狐默认为 on.