网络流

P4843 清理雪道(上下界网络流)

不想你离开。 提交于 2020-03-04 03:12:24
P4843 清理雪道 上下界最小流 我们先搞一遍 上下界可行流(转) 回忆上下界最大流的写法:在可行流的残量网络$s\ -\ t$上跑最大流,答案为可行流$+$残量网络的最大流 那么上下界最小流的写法呢? 只要在残量网络$t\ -\ s$上跑最大流,答案就是可行流$-$残量网络$t\ -\ s$的最大流辣 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; #define N 1005 #define M 1000005 const int inf=2e9; int n,S,T,pS,pT,ex[N],d[N],cur[N]; queue <int> h; bool vis[N]; int cnt=1,hd[N],nxt[M],ed[N],poi[M],val[M],fr[M]; inline void adde(int x,int y,int v){ nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt, ed[x]=cnt, poi[cnt]=y, val[cnt]=v, fr[cnt]=x; } inline void link(int x,int y,int v){adde(x,y,v),adde(y,x,0);}

POJ-1149网络流

筅森魡賤 提交于 2020-03-01 20:57:14
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24426 Accepted: 11127 Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can’t unlock any pighouse because he doesn’t have the keys. Customers come to the farm one after another. Each of them has keys to some pig-houses and wants to buy a certain number of pigs. All data concerning customers planning to visit the farm on that particular day are available to Mirko early in the morning so that he can make a sales-plan in order to maximize the number of pigs sold. More precisely, the procedure is as

网络流——最小割求最大权闭合子图

人盡茶涼 提交于 2020-02-26 06:19:44
定义 有一个有向图,每一个点都有一个权值(可以为正或负或0),选择一个权值和最大的子图,使得每个点的后继都在子图里面,这个子图就叫最大权闭合子图。 如下图: 能选的子图有Ø,{4},{3,4},{2,4},{1,2,3,4},它们的权值分别为0,-1,5,-6,4. 所以最大权闭合子图为{3,4},权值为5. 解法 这个问题可以转化为最小割问题,用网络流解决。 从源点s向每个正权点连一条容量为权值的边,每个负权点向汇点t连一条容量为权值的绝对值的边,有向图原来的边容量全部为无限大。 求它的最小割,割掉后,与源点s连通的点构成最大权闭合子图,权值为(正权值之和-最小割)。 如何理解 割掉一条边的含义 由于原图的边都是无穷大,那么割边一定是与源点s或汇点t相连的。 割掉s与i的边,表示不选择i点作为子图的点; 割掉i与t的边,表示选择i点为子图的点。 如果s与i有边,表示i存在子图中; 如果i与t有边,表示i不存在于子图中。 合法性 只有s与t不连通时,才能得到闭合子图。 如果s与t连通,则存在点i,j,使得s到i有边,i到j连通,j到t有边,所以j一定是i的后继,但选择了i,没有选择j,不是闭合子图。 如果s与t不连通,选择了正权点i,一定选择了i后继中的所有负权点。设j是i的后继中的正权点,则割掉s到j的边是没有意义的,最小割不会割掉它,则j一点被选中,所以i的所有后继都被选中

RTMP流媒体播放过程

随声附和 提交于 2020-02-22 19:51:23
本文描述了从打开一个RTMP流媒体到视音频数据开始播放的全过程。 注意:RTMP中的逻辑结构 RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示: 1 简要介绍 播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。 2 握手(HandShake) 一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块 a) 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。 b) 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。 c) 当客户端和服务器分别收到S2和C2后,握手完成。 握手 3建立网络连接(NetConnection) a) 客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。 b) 服务器接收到连接命令消息后

图论-网络流④-最大流解题①

て烟熏妆下的殇ゞ 提交于 2020-02-17 01:50:22
图论-网络流④-最大流解题① 上一篇: 图论-网络流③-最大流② 下一篇: 图论-网络流⑤-最大流解题② 参考文献: https://www.luogu.com.cn/problemnew/solution/P1231 大纲 什么是网络流 最大流(最小割) D i n i c Dinic D i n i c (常用) E K EK E K S a p Sap S a p F o r d − F u l k e r s o n Ford-Fulkerson F o r d − F u l k e r s o n (不讲) H L P P HLPP H L P P (快) 最大流解题 Start \color{#33cc00}\texttt{Start} Start End \color{red}\texttt{End} End 费用流 S p f a Spfa S p f a 费用流 B e l l m a n − F o r d Bellman-Ford B e l l m a n − F o r d 费用流 D i j k s t r a Dijkstra D i j k s t r a 费用流 z k w zkw z k w 费用流 费用流解题 有上下界的网络流 无源汇上下界可行流 有源汇上下界可行流 有源汇上下界最大流 有源汇上下界最小流 最大权闭合子图 有上下界的网络流解题

网络流建图

南笙酒味 提交于 2020-02-17 00:18:27
最大流问题变形: 多汇点多源点: 加一个超级源点S与超级汇点T S到每个源点建立一条容量为对应的最大流出容量的边 每个汇点到T建立一条容量为对应的最大流入容量的边 无向图: 把无向图的一条边拆成两个反向的容量相等的有向边 顶点上有流量限制: 把每个顶点拆成两个顶点,一个入,一个出,然后入->出连接一条容量为顶点流量限制c的边 有最小流量限制: 最小费用流问题变形: 与最大流类似 最小权匹配问题: 两类物体之间的对应关系,把两类物体看成顶点,并在顶点之间连接权重为对应花费的边,就转化为最小权匹配问题。 可以使用最小费用流解决 例如:人要从楼A逃到楼B里面去,A里面又Ai个人,B的最大容量为Bi,Ai ->Bj有一个时间花费,问最小的花费。 1、 将A楼的顶点集定为U,B为V,同时增加S,T点 2、 S->Ui 建立容量为Ai,花费为0的边 3、 Vi->T建立容量为Bi ,花费为0的边 4、 Vi->Vj建立通量为INF,花费为对应花费的边 5、 所有大楼的总人数为F,则求的就是流量为F的最小费用流 最大闭合图: 闭合图:有向图的点集,该点集的所有出边都指向这个点集 最大闭合图就是所有点集里顶点权值和最大的一个,通常是反映了某事件是另一个的必要条件,相互依赖。 这个问题可以使用最小割来解决 1、 增加源点S与汇点T 2、 所有原有的边改为容量为INF 3、

hdu4289城市与歹徒 网络流

我们两清 提交于 2020-02-12 22:03:37
  题目大意就是要从歹徒要从s点运送货物到t点,警察在一些城市拦截,在每一个城市拦截都有一定的花费,问最小花费是多少可以拦截住歹徒。   呐,在某些点设置障碍,使得整张图不能在联通,我们知道一个类似的问题:割断某些点使得图不能再联通——最小割问题,那么把这些点拆了,点权变为边权,不就是最小割问题了么,我们知道最小割等于最大流,所以这就是一个拆点+网络流的问题。   代码: #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; const int maxn=2100,maxm=50005; const int inf=2147483647; int n,m; int S,T; int x,y; struct zhw{ int to,last,val; }tu[maxm<<2]; int tot,head[maxn]; void add(int x,int y,int v) { tot++,tu[tot].last=head[x],head[x]=tot,tu[tot].to=y,tu[tot].val=v; tot++,tu[tot].last=head[y],head[y]=tot,tu[tot].to=x,tu[tot].val=0; } int ans

[网络流24题] 方格取数问题

独自空忆成欢 提交于 2020-02-07 06:57:56
相邻格不能同时选,通过黑白染色把相邻格染成不同色,构成一个二分图。 由s向所有白点连接一条容量为wij的边,由黑点向t连接容量为wij的边,白点向相邻黑点点容量为INF的边,不能选相邻格即不能让s-t联通,问题转化为求s-t最小割,即最大流。 // q.c #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #define mem(a) memset(a,0,sizeof(a)) using namespace std; const int M=35,INF=(int)1e8; struct Edge { int v,nex,flow,cap; Edge() {} Edge(int a,int b,int c,int d):v(a),nex(b),flow(c),cap(d) {} }ed[M*M<<4]; int cnt,head[M*M]; void add_edge(int a,int b,int c) { ed[cnt]=Edge(b,head[a],0,c); head[a]=cnt++; ed[cnt]=Edge(a,head[b],0,0); head[b]=cnt++; } struct Dinic {

网络流(dinic算法)

北城余情 提交于 2020-02-06 20:08:56
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流。 输入格式 第一行包含四个正整数N、M、S、T,分别表示点的个数、有向边的个数、源点序号、汇点序号。 接下来M行每行包含三个正整数ui、vi、wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi) 输出格式 一行,包含一个正整数,即为该网络的最大流。 输入输出样例 输入 #1 4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40 输出 #1 50 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+10; //int read(){ // int x=0; // int zf=1; // char ch=' '; // while(ch != '-'&&(ch<'0'||ch>'9')) ch=getchar(); // if(ch=='-') zf=-1,ch=getchar(); // while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); // return x*ch; //} struct node{ int to,w,nxt; }e[maxn]; int n,m,s,t; int