max函数

Dijkstra的最小费用最大流问题

烂漫一生 提交于 2019-11-26 17:59:59
对于最小费用最大流问题,它的重点就在于 “增广路” 什么是 增广路? 就是在以找的的路的基础上再加一条路 加上这条路能让结果更大,直接使用 Dijkstra 能找的的路是最短的路,继续用能找到剩下路中间的最小路, 但是这两条路加上来不一定是总体的最小路 ,第一次 1->3 ->5->4->6 第二次1->2->6 这并不是我们需要的结果,所以在找第二条最短路时,我们需要能反悔,能不 让第一次不走3->5,怎么反悔,在构建图时加上一条反边,第一次走了多少正边减少多少反边加上多少,这样第二次就可以走5->3然后走3->6这条线,第一次走了3->5,第二次凑了5->3相当与反悔了第一次的路,这样就能尽可能的走最小路。 #include<iostream> #include<cstring> #include<queue> using namespace std; /*6 11 1 2 23 1 3 12 1 4 99 2 5 17 2 6 73 3 5 3 3 6 21 4 6 8 5 2 33 5 4 5 6 5 20*/ #define MAX 23060 int MinCos; int v,cnt; int Head[MAX]; int Next[MAX]; int F[MAX];//流量 int To[MAX];//终结的 int Dis[MAX]; int Cos[MAX];/

柱形图(三分)

ε祈祈猫儿з 提交于 2019-11-26 17:46:49
考试时没审清题,内存超限....... 事实上这是个三分题, 因为我们先假设一个最高点和最高点的高度,随着最高点高度的增加, 其他点的贡献为abs(a[j]-(h[i]-abs(i-j)))(j为最高点) 所以点的贡献的和是一个单峰函数(下凹的) 那么我们三分即可 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<string> 7 #include<map> 8 #include<vector> 9 #include<queue> 10 #include<set> 11 #define MAXN 200010 12 #define ps push_back 13 #define int long long 14 using namespace std; 15 int n;int a[MAXN];int max_r=0;int l,r;int minn=0x7ffffffffffff; 16 int work(int x,int root) 17 { 18 int sum=0; 19 for(int i=1;i<=n;++i) 20 { 21 int me=x-abs(i-root); 22 sum+=abs(a

函数的嵌套

安稳与你 提交于 2019-11-26 17:34:21
函数的嵌套 一、函数的嵌套定义 函数套函数 def f1(): def f2(): print('from f2') return f2 abc = f1() # f1()拿到函数的返回值,函数的返回值是f2, abc就相当于f2 abc() 二、函数的嵌套调用 #比较4个数的大小 def self_max(x,y): if x>y: return x else: return y def self_4_max(x,y,p,q): res1=self_max(x,y) res2 = self_max(p,q) res3 = self_max(res1,res2) return res3 print(self_4_max(1,20,50,90)) ----------------------------------------------------- 90 来源: https://www.cnblogs.com/yanjiayi098-001/p/11329251.html

bzoj_1036 树状数组套线段树

♀尐吖头ヾ 提交于 2019-11-26 16:02:28
bzoj_1036 ★★★★ 输入文件:bzoj_1036.in 输出文件:bzoj_1036.out 简单对比 时间限制:1 s 内存限制:162 MB 【 题 目描述】 一棵树上有 n 个节点,编号分别为 1 到 n ,每个节点都有一个权值 w 。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点 u 的权值改为 t II. QMAX u v: 询问从点 u 到点 v 的路径上的节点的最大权值 III. QSUM u v: 询问从点 u 到点 v 的路径上的节点的权值和 注意:从点 u 到点 v 的路径上的节点包括 u 和 v 本身 【 输 入格式】 输入的第一行为一个整数 n ,表示节点的个数。 接下来 n – 1 行,每行 2 个整数 a 和 b ,表示节点 a 和节点 b 之间有一条边相连。 接下来 n 行,每行一个整数,第 i 行的整数 wi 表示节点 i 的权值。 接下来 1 行,为一个整数 q ,表示操作的总数。 接下来 q 行,每行一个操作,以 “CHANGE u t” 或者 “QMAX u v” 或者 “QSUM u v” 的形式给出。 对于 100 %的数据,保证 1<=n<=30000 , 0<=q<=200000 ;中途操作中保证每个节点的权值 w 在 -30000 到 30000 之间。 【 输 出格式】 对于每个

二分图匹配算法(最大流匈牙利)

馋奶兔 提交于 2019-11-26 14:12:29
二分图匹配 相关概念 无向二分图 \(G(U\bigcup V,E)\) :U是一个顶点集合,V是另一个顶点集合,对于一个集合内的点无边直接相连,而对于不同集合的点可以连边,即 \((u,v)\in E\) 。 匹配 :两两不含公共端点的边的集合M称为匹配(就是两个集合之间连的边,只不过不同边的端点不能重合) 最大匹配 :元素最多的M,即而G中两两不含公共端点的边的集合 \(M\subseteq E\) 的基数 \(|M|\) 的最大值就是最大匹配。 完美匹配 :当最大匹配的匹配数满足 \(2*|M|=V\) 时,称为完美匹配。形象的解释就是一各集合的所有点到另一个集合都有互不相同且唯一对应的点。(类似于函数的双射), 想象一下图 增广路 :设M为二分图G已匹配边的集合,若P是图G中一条连通两个 未匹配 顶点的路径(P的起点在X部,终点在Y部,反之亦可),并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。 (就是连了两个还没有配对的顶点的路径,路径有一个配对边,一个非配对边交替组成) 更多详细概念解释见匈牙利部分的参考文章 最大流的方法 二分图的匹配可以看成是一种最大流问题(这谁想得出来啊)。具体过程如下: 现在有两个点集U和V,之间已经有了写连边,我们需要引入一个源,一个汇,把源跟集合U的所有点有向地连起来

So you want to be a 2n-aire?【期望DP】

家住魔仙堡 提交于 2019-11-25 16:59:07
传送门 我们用递推的思想, 用d[i]表示“答对i题后的最大期望奖金”,再加上“不回答”时的情况,可以得到:若第1题答对 概率为p,期望奖金的最大值 = m a x ( 2 0 , p ∗ d [ 1 ] ) max(2^0, p*d[1]) m a x ( 2 0 , p ∗ d [ 1 ] ) 上述分析可以推广到一般情况,但是要注意一点:到目前为止,一直假定p是已知的, 而p实际上并不固定,而是在 t ~ 1 t~1 t ~ 1 内均匀分布。根据连续概率的定义,d[i]在概念上等于 m a x ( 2 i , p ∗ d [ i + 1 ] ) max(2i, p*d[i+1]) m a x ( 2 i , p ∗ d [ i + 1 ] ) 在 p = t ~ 1 p=t~1 p = t ~ 1 上的积分. 因为有max函数的存在,需要分两种情况讨论,即 p ∗ d [ i + 1 ] < 2 i p*d[i+1]<2^i p ∗ d [ i + 1 ] < 2 i 和 p ∗ d [ i + 1 ] ≥ 2 i p*d[i+1]≥2^i p ∗ d [ i + 1 ] ≥ 2 i 两种情况。 令 p 0 = m a x ( t , 2 i / d [ i + 1 ] ) p0=max(t, 2i/d[i+1]) p 0 = m a x ( t , 2 i / d [ i +