题意:给定N点M边的无向连通图,每条边有两个权值(g,s). 给定G,S. 让你给出一组(g0,s0)使得图中仅留下g<=g0, s<=s0的边之后,依然连通,并求Gg0+Ss0的最小值. n<=200,m<=50000. 思路:枚举g0,求最小的s0,满足生成MST. 把边按g排序,一条边一条边的加入,然后在加入边的集合里面找出最小的s.但是每次排序复杂度过高,而且边数也过多,(LCT做也行吧,就不需要考虑这么多). 我们去优化暴力的做法.假设新加入一条边,显然最多改变一条边,那…
The kingdom of Olympia consists of N cities and M bidirectional roads. Each road connects exactly two cities and two cities can be connected with more than one road. Also it possible that some roads connect city with itself making a loop. All roads a…
CF76A.Gift 题意:noi2014魔法森林弱化版QwQ,最小化\(max(g_i)*G + max(s_i)*S\)的最小生成树 考虑按g升序加边,用已在生成树中的边和新加入的边求当前最小生成树. 复杂度\(O(nm)\) vector真好用 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> usi…
题目:聪明的猴子 链接:https://ac.nowcoder.com/acm/problem/19964 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地 表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面 的不同树冠上来回穿梭,以找到喜欢吃的果实.现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都 很小,可以忽略不计.我们在这块区域上建立直角坐标系,则每一棵树的位置由其所对应的坐标表…
题面链接:https://codeforces.com/problemset/problem/1245/D 题意大概是给你一些城市的坐标,可以在城市中建立发电站,也可以让某个城市和已经建好发电站的城市连接,保证在这两种操作下使得所有的城市供电,在城市建发电站需要花费Ci,城市a和城市b连接需要花费(|Xa-Xb| + |Ya-Yb| )*(Ka+Kb),求最小的花费让所有城市通电. 思路:首先建立一个源点,连接各个城市,边权就是建发电站费用Ci,若选择此边则表示是在该城市建了发电站. 剩下的城市…
[条件转换] 两两之间有且只有一条简单路径<==>树 题意:一个图中有两种边,求一棵生成树,使得这棵树中的两种边数量相等. 思路: 可以证明,当边的权是0或1时,可以生成最小生成树到最大生成树之间的任意值的生成树. 那么,方法就是生成最小生成树,然后,尽量替换0边,使得其成为值为(n-1)/2的生成树. 代码: 写的很乱,没有条理.还是应当先写出流程伪码后再敲代码的. #include <cstdio> #include <cstring> #include <v…
首先考虑一道奥数题目: □□□ + □□□ = □□□,要将数字1~9分别填入9个□中,使得等式成立.例如173+286 = 459.请输出所有合理的组合的个数. 我们或许可以枚举每一位上所有的数,然后判断每一位上的数需要互不相等且满足等式即可,但是用代码写出来需要声明9个变量且判断. 那么我们把这个问题考虑为一个求这个9个数的全排列问题,即可得到更优雅的解答方式. 首先我们考虑一个经典的全排列问题(<啊哈,算法>): 输入一个数,输出1~n的全排列. 现在我们考虑有1.2.3的3张扑克牌和编…
在学习解决分布式事务基本思路之前,大家要熟悉一些基本解决分布式事务概念名词比如:CAP与Base理论.柔性事务与刚性事务.理解最终一致性思想,JTA+XA.两阶段与三阶段提交等. 如何保证强一致性呢?计算机专业的童鞋在学习关系型数据库的时候都学习了ACID原理,这里对ACID做个简单的介绍.如果想全面的学习ACID原理,请参考ACID 关系型数据库天生就是解决具有复杂事务场景的问题,关系型数据库完全满足ACID的特性. 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩…
Expected diameter of a tree 我们先两次dfs计算出每个点能到达最远点的距离. 暴力计算两棵树x, y连边直径的期望很好求, 我们假设SZ(x) < SZ(y) 我们枚举 x 的每个端点, 二分找到分界点, 复杂度为SZ(x) * log(SZ(y)) 其实我们对于每次询问我们记忆化一下就可以啦. 这是因为对于SZ(x)小于 sqrt(n)的询问, 我们直接暴力求就好啦, 复杂度q * SZ(x) * log(SZ(y)) 对于SZ(x) > sqrt(n) 这样的…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4660 想到一个点可以用它与圆的两个切点表示.并想到可以把切点极角排序,那么就变成环上的一些区间之间的问题. 发现了一个区间和另一个区间可以共存,当且仅当它们相交.不知怎的没看到题面的 “直线” ,以为包含也可以. 所有区间都两两相交,考虑枚举一个点作为所有区间都经过的点.但发现因为是环,可以有区间是首部相交一些区间.尾部相交一些区间的. 然后就不会了. 其实考虑没有那种首部相交一些.尾部相…
题意:给你n个串,给你每个串在总串中开始的每个位置,问你最小字典序总串. 思路:显然这道题有很多重复填涂的地方,那么这里的时间花费就会特别高. 我们维护一个并查集fa,用fa[i]记录从第i位置开始第一个没填涂的位置,那每次都能跳过涂过的地方.每次填完当前格就去填find(fa[i + 1]). ps:一定要合并,不然超时. 代码: #include<stack> #include<vector> #include<queue> #include<set>…
按深度染色,奇深度的点存反权值. #include <bits/stdc++.h> using namespace std; vector <]; ],a[],s[],vis[],ind,n,m,src[],frm[],dep[]; void dfs(int p) { vis[p]=; frm[p]=ind+; ;i<g[p].size();i++) ) dep[g[p][i]]=dep[p]+, dfs(g[p][i]); seq[p]=++ind; } void build(i…
一 题面 C. Match Points 二 分析 根据题意很容易想到要去找满足条件的数,因为可以打乱输入的顺序,所以很容易想到二分. 但是如果直接对输入的数组进行二分,如输入$a$,直接在数组里二分找$a+z$,就会出现不是最优解的情况,例如: $4\ 8\ 9\ 12$ 其中$z = 4$ 如果从第一个数直接二分那样找就会出问题. 那么我们可以思考任意一个数组最优的解是多少?其实就是$n/2$.那么排序后,肯定可以从中间那个位置划分,后面的每个数可以找到最前面的数相对应.那么我们直接遍历一下…
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [Done]洛谷P2511 [HAOI2008]木棍分割 [Done]洛谷P4099 [HEOI2013]SAO [Done]NOIAC37 染色 单调队列优化 前置技能:单调队列(经典的问题模型:洛谷P1886 滑动窗口) 用于优化形如\(f_i=\min/\max_{j=l_i}^{i-1}\{g_…
题意: 在这些小岛中建设最小花费的桥,但是一座桥的距离必须在10 -- 1000之间. 思路: 用最小生成树解决吧,就那两个算法. 代码: prim #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; #define N 105 #define inf 0x3f3f3f3f int n,i,j,x[N],y[N]; dou…
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树.  例如,对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树. 普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法. 基本思想 对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边. 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点…
http://codeforces.com/problemset/problem/160/D 这道题要求哪条边存在于某个最小生成树中,哪条边不存在于最小生成树中,哪条边绝对存在于最小生成树中 明显桥边一定存在于所有最小生成树中,然而怎么处理存在某个最小生成树的边呢? 借助kruskal算法的性质,由小到大,每次处理同一权值的边,如果边连接的点已经联通就不要管,否则那些处理的边一定存在于某最小生成树上 批量处理的思想很巧妙 #include <cstdio> #include <vecto…
树的定义:连通无回路的无向图是一棵树. 有关树的问题: 1.最小生成树. 2.次小生成树. 3.有向图的最小树形图. 4.LCA(树上两点的最近公共祖先). 5.树的最小支配集.最小点覆盖.最大独立集. 一.最小生成树 解决的问题是:求无向图中边权值之和最小的生成树. 算法有Kruskal和Prim. Kruskal使用前向星和并查集实现,可以存储重边(平行边),时间复杂度是O(m log m  +  m),m是边的数量. Prim使用邻接矩阵建图,不可以存储重边(平行边),如果出现重边,存储的…
http://poj.org/problem?id=3241 曼哈顿距离最小生成树模板题. 核心思想是把坐标系转3次,以及以横坐标为第一关键字,纵坐标为第二关键字排序后,从后往前扫.扫完一个点就把它插到树状数组的y-x位置上,权值为x+y.查询时查询扫过的所有点满足ydone-xdone>=ynow-xnow时,直接是树状数组中的的一个后缀区间,从后往前扫保证了区间内的这些点都在当前点的y轴向右扫45度的范围内.树状数组实现查询x+y的最小值,以及此最小值对应原数组中的位置,方便建图连边. 模板…
转自:http://blog.chinaunix.net/uid-20357359-id-1963662.html 这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP的状态转移图吧. 关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况.前者是指有本地主机主动发起的关闭:而后者则是指本地主…
通常来说,如果我们自己通过 value 改变了 input 元素的值,我们肯定是知道的,但是在某些场景下,页面上有别的逻辑在改变 input 的 value 值,我们可能希望能在这个值发生变化的时候收到通知.于是我们想到了 onchange 事件,然而我们遗憾的发现,onchange 事件却并不会被触发,因为onchange事件触发是有条件的. onchange 事件的触发条件 onchange 触发需要三个步骤: input 元素获得焦点 input 元素的值发生变化 input 元素失去焦点…
这个问题之前没有怎么留意过,是最近在面试过程中遇到的一个问题,面了两家公司,两家公司竟然都面到到了这个问题,不得不使我开始关注这个问题.说起CLOSE_WAIT状态,如果不知道的话,还是先瞧一下TCP的状态转移图吧. 关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况.前者是指有本地主机主动发起的关闭:而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接.将关闭部分的状态转移摘出来,就得到了下图: 产生原因通过图…
在做项目的过程中遇到这样一个问题,下面提出一种解决方法,主要思想是图片的Copy,如还有其他方法,欢迎交流. 在前端图片控件绑定显示时,使用转换器进行转义绑定   (1)转换器: public class ImgConverter : IValueConverter     {         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInf…
普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树算法 基本思想:对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边. 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如此不断重复,直到U=V为止,最小生成树构造完毕,这时集合T中包含了最小生成树中的所有边. 代码实现 1. 思想逻辑 (1)以无向图的…
Prim算法采用与Dijkstra.Bellamn-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点. 算法分析 & 思想讲解: Prim算法每次都将一个蓝点 U 变成白点,并且此蓝点 U 与白点相连的最小边权还是当前所有蓝点中最小的.这样就相当于向生成树中添加了n-1次最小的边,最后得到的一定是最小生成树. 我们通过对下图最小生成树的求解模拟来理解上面的思想.蓝点和虚线代表未进入最小生成树的点.边:白点和实线代表已进入最小生成树的点.边. #inc…
G. 铁路修复计划 二分答案,改变边的权值,找最小生成树即可. 类似的思想还可以用在单度限制最小生成树和最优比例生成树上. #include<iostream> #include<cmath> #include<vector> #include<set> #include<map> #include<algorithm> #include<stack> #include<cstdio> #include<…
概要 我的上一篇写遗传算法解决排序问题,当中思想借鉴了遗传算法解决TSP问题,本质上可以认为这是一类问题,就是这样认为:寻找到一个序列X,使F(X)最大. 详解介绍 排序问题:寻找一个序列,使得这个序列的逆序对的倒数最大. TSP问题:寻找一个序列,使得这个序列的总路径长的倒数最大. 这两个问题有一个共同的特点是,所有的节点都要用上,而使用遗传算法解决排序问题(每一个格子可以认为是一个节点),是需要从众多的节点之中寻找到某些节点构成一个序列X. 序列X必须满足的条件是: 相邻节点直接邻接 无重复…
所谓不平衡指的是:不同类别的样本数量差异非常大. 数据规模上可以分为大数据分布不均衡和小数据分布不均衡.大数据分布不均衡:例如拥有1000万条记录的数据集中,其中占比50万条的少数分类样本便于属于这种情况.小数据分布不均衡:例如拥有1000条数据样本的数据集中,其中占有10条的少数分类样本便于属于这种情况. 样本类别分布不平衡主要出现在分类问题的建模上.导致样本量少的分类所包含的特征过少,很难从中提取规律:即使得到分类模型,也容易产生过度依赖于有限的数据样本而导致过拟合的问题,当模型应用到新的数…
----前言 ​ 最近一直研究算法,上个星期刷leetcode遇到从两个数组中找TopK问题,因此写下此篇,在一个数组中如何利用快速排序解决TopK问题. 先理清一个逻辑解决TopK问题→快速排序→递归→分治思想,因此本章内容会从此逻辑由后往前叙述 何为分治思想? 从字面上就很容易能够推出"分而治之",维基百科的解释为"就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并." 简述一下后半部分&quo…
问题背景 最近小伙伴提了一个希望提高后台下拉列表可操作性的需求,原因是下拉列表选项过多,每次下拉选择比较费时费力且容易出错,硬着头皮啃了啃前端知识,网上搜寻了一些下拉列表实现的资料,这里总结一下. PS: 以下所有代码实现效果截图均为chrome浏览器下效果,其他浏览器效果可能有一定差别,比如datalist在firefox和chrome下就有较明显差别,这不是本文重点这里不做讨论. 最简单的下拉列表实现 在HTML中传统显示下拉框的方法是使用select+option标签组合实现: <sele…