一个不能更清楚的网络流介绍

↑虽然不是我写的但是观摩一下总是没问题的嗯

 
看到晗神学的是神奇的ek算法.
但是看起来还是Ford-Fulkerson比较简单..所以我就学了这个...嗯其他的先看看..这个似乎比较好上手....
 
从题目要求来看,我们只需要建一个双向图,然后用神奇的网络流算法算出到终点的最大流量-1即可 ( 因为留一条路出来就可以满足来回不能只经过每个土地1次或者0次 )
 但是并不对
 
如上为本题某数据 ( 好像是in3 ) 的建图[我知道我画的很丑],所示从1到7的流为2,但是放狗数为0,说明这个建图太naive了,报道出了偏差;
很明显,这个建法错误的原因是点4被经过了两次,但是事实上每个点只能经过一次,普通的建图并不能完成这个要求;
我们需要的是限制每个点的流量,那么我们把每个点变成流量为1的边 参考晗神博客 )如下图
(少写一个4假装没看见好了,最后的7看起来很像1就像吧..)
这些点i与i+n相连的边,边权都为1,这样就做到了每个"点"经过一次,起点和终点不需要流量限制所以注意特判
 
所以最恶心的是为什么我完全没考虑每个点的流量就能写90分???????滔天的水扑面而来啊摔
顺便存一个丑代码
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const int minf=;
int n,m;
struct nod{
int rev;
int y;
int next;
int v;
}e[];
int head[]={};
int tot=;
bool vis[]={};
inline void init(int x,int y,int v,int rev){
e[++tot].y=y;
e[tot].next=head[x];
e[tot].v=v;
e[tot].rev=rev;
head[x]=tot;
}
inline int dis(int x){
return x+n;
}
int dfs(int s,int t,int f){
if(s==t){
return f;
}
vis[s]=;
for(int i=head[s];i;i=e[i].next){
int v=e[i].v,y=e[i].y;
if(vis[y]==&&v>){
int d=dfs(y,t,min(f,v));
if(d>){
e[i].v-=d;
e[e[i].rev].v+=d;
return d;
}
}
}
return ;
}
int main(){
//freopen("wtf.in","r",stdin);
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<n;i++){
init(i,i+n,,tot+);
init(i+n,i,,tot);
}
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
if(x>y){
swap(x,y);
}
if(y==n){
init(x+n,y,,tot+);
init(y,x+n,,tot);
init(y,x+n,,tot+);
init(x+n,y,,tot);
}
else if(x==){
init(,y,,tot+);
init(y,,,tot);
init(y,,,tot+);
init(,y,,tot);
}
else{
init(x+n,y,,tot+);
init(y,x+n,,tot);
init(y+n,x,,tot+);
init(x,y+n,,tot);
}
}
int ans=;
for(;;){
memset(vis,,sizeof(vis));
int f=dfs(,n,minf);
if(f==){
break;
}
ans+=f;
}
if(ans==){
printf("%d\n",ans);
}
else
printf("%d\n",ans-);
return ;
}

网络流小结+[jzyzoj p1320] patrol的更多相关文章

  1. 【jzyzoj】【p1320 patrol】 巡逻(网络流最小割例题)

    描述 Description FJ有个农场,其中有n块土地,由m条边连起来.FJ的养牛场在土地1,在土地n有个新开张的雪糕店.Bessie经常偷偷溜到雪糕店,当Bessie去的时候,FJ就要跟上她.但 ...

  2. 网络流小结(HNOI2019之前)

    \(\text{一:Dinic最大流}\) 最坏复杂度 \({\mathcal O(n^2m)}\) 一般可以处理 \(10^4\) ~ \(10^5\) 的网络. struct Edge { int ...

  3. BZOJ 1497 JZYZOJ 1344 [NOI2006]最大获利 网络流 最大权闭合图

    http://www.lydsy.com/JudgeOnline/problem.php?id=1497 http://172.20.6.3/Problem_Show.asp?id=1344   思路 ...

  4. [bzoj1565][NOI2009]植物大战僵尸_网络流_拓扑排序

    植物大战僵尸 bzoj1565 题目大意:给你一张网格图,上面种着一些植物.你从网格的最右侧开始进攻.每个植物可以对僵尸提供能量或者消耗僵尸的能量.每个植物可以保护一个特定网格内的植物,如果一个植物被 ...

  5. [bzoj1497][NOI2006]最大获利_网络流_最小割

    最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...

  6. [luogu1402]酒店之王_网络流

    酒店之王 luogu-1402 题目大意:有n个人,p道菜,q个房间,每个人喜欢吃一些菜.喜欢住一些房间,如果一个人即住到了他喜欢的房间有吃到了他喜欢的菜,就对答案贡献++,求最大贡献. 注释:1&l ...

  7. [jdoj1817]Drainage Ditches_网络流

    Drainage Ditches jdoj-1817 题目大意:网络流裸求最大流 注释:n(点数),m(边数)<=200. 想法:裸的网络流求最大流,用bfs+dfs,美其名曰dinic. 没有 ...

  8. 网络流 最大流—最小割 之SAP算法 详解

    首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...

  9. 【做题】POJ3469 Dual Core CPU——第一道网络流

    刚学了Dinic就开始做题,然后就崩了. 题意:若干个任务,可以放在两个CPU中任意一个上完成,各有一定代价.其中又有若干对任务,如果它们不在同一个CPU上完成,会产生额外代价.最小化并输出代价. 一 ...

随机推荐

  1. 【洛谷 P4360】 [CEOI2004]锯木厂选址(斜率优化)

    题目链接 一开始我的\(dp\)方程列错了,其实也不能说列错了,毕竟我交上去还是把暴力的分都拿到了,只是和题解的不一样,然后搞半天没搞出来去看题解,又看不懂,对不上,原来状态设置不一样自闭了. \(f ...

  2. 【译】Linux提权基础

    英文原文: Basic Linux Privilege Escalation 在开始之前,我想指出 - 我不是专家. 据我所知,在这个巨大的领域没有一个“魔法”的答案. 这只是我的发现,写出来,共享而 ...

  3. 小程序_请求封装network

    在utils目录下创建network.js文件封装请求 封装的network.js: //模块一,全局变量 let urlList = { host: 'http://47.106.25.53/', ...

  4. 五. Jmeter--HTTP Cookie Manager

    1. 添加HTTP Cookie Manager 2.添加登录login http,request info 和 HTTP Header Manager 中的信息是从fiddler中拿的, 至于hea ...

  5. ThinkPHP的运行流程-1

    我在index\Lib\Action\目录下新建了一个ShowAction.class.php文件.ps:该目录是控制器的目录. 然后这个文件中继承了action这个类.代码如下: 1 2 3 4 5 ...

  6. python基础===string模块常量

    In [8]: import string In [9]: dir(string) In [10]: string.ascii_letters Out[10]: 'abcdefghijklmnopqr ...

  7. TGPPen 宽度的理解

    procedure TForm4.Button1Click(Sender: TObject); var g: TGPGraphics; p: TGPPen; begin g := TGPGraphic ...

  8. POJ 3026 Borg Maze(Prim+bfs求各点间距离)

    题目链接:http://poj.org/problem?id=3026 题目大意:在一个y行 x列的迷宫中,有可行走的通路空格’  ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...

  9. POJ 3616 Milking Time(最大递增子序列变形)

    题目链接:http://poj.org/problem?id=3616 题目大意:给你时间N,还有M个区间每个区间a[i]都有开始时间.结束时间.生产效率(时间都不超过N),只能在给出的时间段内生产, ...

  10. Django 中form的用法

    form的主要作用:1.在html中生成表单框架,2.验证数据(实话实说,很简洁,但不实用,灵活性差) from django.db import models # Create your model ...