很长时间都没想出来的简单题,看了题解才写出来,还是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的更多相关文章

  1. POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)

    POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...

  2. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  3. 1519: 【USACO】超级书架

    1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...

  4. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...

  5. 【CPLUSOJ】【USACO】【差分约束】排队(layout)

    [题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...

  6. 【USACO】Dining

    [题目链接] [JZXX]点击打开链接 [caioj]点击打开链接 [算法] 拆点+网络流 [代码] #include<bits/stdc++.h> using namespace std ...

  7. 【USACO】Optimal Milking

    题目链接 :        [POJ]点击打开链接        [caioj]点击打开链接 算法 : 1:跑一遍弗洛伊德,求出点与点之间的最短路径 2:二分答案,二分”最大值最小“ 3.1:建边,将 ...

  8. 【USACO】 Balanced Photo

    [题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...

  9. 【USACO】 Balanced Lineup

    [题目链接] 点击打开链接 [算法] 这是一道经典的最值查询(RMQ)问题. 我们首先想到线段树.但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解. 稀疏表算法.其实也是一种动态 ...

随机推荐

  1. CCNA 6.9

    page 201 show ip route    Correction(05-4)   Basic configuration of R1:   enable configure terminal ...

  2. SVN服务器配置实战

    [需求] 为公司多个部门建立的SVN仓库compay 公司部门和人员构成 A部门 (zhangsan,lisi,wanger,mazi) B部门(jia,yi,bing,ding) C部门(chun, ...

  3. POJ 2752 - Seek the Name, Seek the Fame (KMP)

    题意:给一个字符串s,问s的某个前缀与后缀相同的情况时,长度是多少. 此题使用KMP的next数组解决. next数组中,j=next[i],next[i]表示S[0...i-1]的某个后缀(字符串S ...

  4. tableviewcell的取消选中,高亮

    1.取消多余cell的分割线 UIView *view = [UIView new]; view.backgroundColor = [UIColor clearColor]; [tableView ...

  5. loaderexceptions

    前段时间遇到一个问题 从容器中取数据时老报一个“无法加载一个或多个请求,请检索loaderexceptions” 真心是不晓得什么问题 以前经常这么用没有问题的 这个是在网站下引用了别的已经编译好的别 ...

  6. UIApplication 概述

    原文地址:http://blog.csdn.net/lixing333/article/details/7777015 以前刚学iPhone开发时,觉得UIApplication这个东西特NB,特神秘 ...

  7. ajax 提交成功页面跳转问题

    jsx/ajax提交成功后采用以下方式跳转:1.本页面跳转:"window.location.href"."location.href" 2.上一层页面跳转:& ...

  8. C# DataContract DataMember

    Windows Communication Foundation (WCF) uses a serialization engine called the Data Contract Serializ ...

  9. PHP 防范xss攻击

    XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输入一些恶意字符,从而破坏页面的表现! 看看常见的恶意字符XSS 输入: 1.XSS 输入通常包含 JavaScript ...

  10. jQuery ajax传多个参数

    ajax可以传送一个或多个参数到后台php中 <script> $(function(){ $("#sub_btn").click(function(){ var em ...