曾任职于阿里巴巴,现就职于美图,专业搬砖100年~
暂时未有相关通用技术能力~
阿里云技能认证
详细说明点击打开链接poj 2728 思路:最优比例生成树 1问题描述: 已知一个完全图,每条边有两个参数(dis和c),求一棵生成树,使(∑xi×ci)/(∑xi×disi)最小,其中xi当第i条边包含在生成树中时为1,否则为0。
点击打开链接poj 1751 思路:最小生成树+prime 分析:只要按照prime的思路求出所有的边,然后输出的时候判断是否是已经建好的即可。
点击打开链接poj 2395 思路:求解最小生成树的最大边 注意:由于这里的长度最大到10^9,所以INF不能为0xFFFFFFF应该为0x3F3F3F3F。
点击打开链接poj 2485 思路:最小生成树+prime+最大边 分析:只要按照prime的算法的思路求出最大的边即可 代码: #include #include #include #include using namesp...
点击打开链接poj 1679 思路:最小生成树+次小生成树 分析:判断最小生成树是否是唯一的,那就可以去判断次小生成树是否大于最小生成树。这里就涉及到了次小生成树的求法 求解次小生成树: step 1.
点击打开链接poj 3625 思路:最小生成树+prim分析: 1 由于点有1000,如果要用kruskal的话最少有1000000条边,所以我么选择用prim算法 2 题目中的点的坐标最大值为10^6,那么如果在平方一下的话会超过int,所以在求两个点之间的距离的时候用在前面乘上一个1.0这样就表示的double从而不会超过int了。
点击打开链接poj 2377 思路:最先生成树+kruskal 分析:kruskal的模板题,最后只要加上一个判断是否所有的点的根节点都是一样的即可。
点击打开链接poj 1789 思路:最小生成树+prime 代码: #include #include #include #include using namespace std; #define MAXN 2010 #defi...
点击打开链接poj 287 思路:最小生成树 + prime 代码: #include #include #include #include using namespace std; #define MAXN 60 #define ...
点击打开链接poj 258 思路:最小生成树 + prime 代码: #include #include #include #include using namespace std; #define MAXN 110 #defi...
点击打开链接poj 1308 思路:并查集 分析:如果是一棵树,那么就只能有唯一的一个根节点。所以我们只要在输入的时候判断两个元素能否合并即可,如果输入的两个元素的根节点相同肯定是不满足的,其它还有“空树”“森林”都不算是树。
点击打开链接poj 1861 思路:最小生成树+并查集+kruskal 分析: 1 模板题,只要按照kruskal的思路即可。 2 题目要求输出的是最小生成树中最大边的最小值,以及多少条边和边的点 代码: #includ...
点击打开链接poj 988 思路: 带权并查集 分析: 1 题目给定2种指令 M x y把x的集合放在y集合的上面,C x求x的下面有多少个元素 2 我们用rank[x]表示x以下有多少个元素,那么对于指令M x y我们始终把左边的合并到...
点击打开链接 poj 1733 1思路: 带权并查集+map+离散化思想 2分析: 由于n的值达到1000000000.所以如果还是直接用原来的方法的话肯定是不行的,所以想到了离散化思想。
点击打开链接hdu 3038 思路: 带权并查集 分析: 1 给定一序列的区间的和,求错误的个数 2 典型的带权并查集,区间[l,r]的和等于sum[r]-sum[l-1]。
点击打开链接 poj 1182 1思路:带权并查集 2分析: 1 对于这道题,我们可以用权值0表示两个动物是属于同类,用权值1表示两个动物是属于捕食关系,用权值2表示两个动物属于竞争关系。
点击打开链接poj 2492 思路:带权并查集 分析: 1 用rank[i] = 0表示关系相同,用rank[i] = 1表示关系不同 2 在输入的时候把两个元素之间的关系建立起来,然后判断当前的两个元素是否在同一个集合里面,如果是则判断是不是属于同一个类型即可。
点击打开链接poj 1703 思路: 简单带权并查集 分析: 1 题目要询问给定的x和y是否是同一个动物 2 我们假设如果不同,那么权值为1,否则为0。
点击打开链接hdu 3047 思路: 带权并查集 分析: 1 题目要求的是错误的条件的个数,这一题还是比较简单的带权并查集 2 我们用rank[x]表示的x到跟节点的距离,那么对于x和y来说,如果x和y在不同集合那么把x和y合并,否则直接...
点击打开链接hdu 3790 思路:最短路+Dijkstra 分析:由于题目要求在最短路径的时候花费最少,那么这就是在做松弛操作的时候判断一下当前的选择的边的花费是不是最少的,那么这样就可以求出最少的花费。
点击打开链接poj 2524 思路:简单的并查集 分析:输入的时候把相同集合的元素合并在一起,那么我们用一个vis数组来标记集合根节点是否出现过。
点击打开链接poj 2236 思路: 普通并查集 分析: 1 初始值所有的电脑都是坏的,然后给肯定n个点的坐标,只有距离不大于d的才认为连通的 2 现在给定两种操作,O p表示编号为p的电脑被修好了,S p q询问p q是否是连通的 ...
点击打开链接poj 1611 思路:最简单的并查集应用 分析:在输入的时候把在同一个集合里面的元素全部合并起来,然后最后在找有几个元素和0的根节点相同即可。
点击打开链接hdu2544 思路: 模板题,求解最短路的四种算法都可以。注意求解最短路时候要处理成无向图 代码: /*Dijkstra*/ #include #include #include #include using nam...
点击打开链接uva 10801 思路:最短路+Dijkstra 分析: 1 有n个电梯,电梯可以到达的层数是一定的,那么我们就把楼层看成是图上的点,那么我们就可以得到的哪些点是有连通的。
点击打开链接1879 /* 1思路:最小生成树+kruskal 2注意把已经建好的合并 */ #include #include #include #include using namespace std; #define MAXN 110...
点击打开链接hdu 1875 /* 1思路:最小生成树+prime(模板题) */ #include #include #include #include #include using namespace std; #define M...
点击打开链接uva 10986 1思路: SPFA + 无向图邻接表2分析: 1题目给定的n最大20000,m最大50000,分析复杂度后发现只有SPFA最靠谱。
点击打开链接uva 558 1思路:利用Bellman_Ford来判断是否存在回环 2分析:在利用Bellman_Fordde 时候如果做了n-1次的松弛步以后还能更新dis数组,那么说明原来的图中存在环,那么最短路就是不存在的。
点击打开链接hdu 1874 思路:最短路+floyd 注意事项:由于输入的数据中会有重边的出现,那么如果出现重边的时候应该取值小的那一个。
点击打开链接uva 10099 题目意思: 有一个旅游团现在去出游玩,现在有n个城市,m条路。由于每一条路上面规定了最多能够通过的人数,现在想问这个旅游团人数已知的情况下最少需要运送几趟 思路:最大生成树 + kruskal 分析:从题目可以知道从起始点到达终点的路径可能会有很多条,但是现在要求运送的次数最少,那么就是要满足每一次的运送都能够达到最多的人数。
点击打开链接uva 10048 题目意思: 现在城市污染很严重,除了平常的污染外还有什么声音污染。现在有c个城市,s个街道,每一个街道有一个声音的分贝值。
点击打开链接uva 567 1思路:最短路+floyd 2分析:题目给定的点的个数为20,那么根据f'loyd的时间复杂度不会超时,那么直接利用floyd即可。
最短路径问题旨在寻找图中两节点之间的最短路径,常用的算法有以下四种。注意是把图处理成无向还是有向Dijkstra's (权值非负) 1 Dijkstra's算法解决的是图中单个源点到其它顶点的最短路径。
点击打开链接hdu 1863 1思路:最小生成树+Prime 2注意:n是边数,m是点数。当m为0的时候输出的数“?”。 代码: #include #include #include #include using namespac...
点击打开链接uva 10369 1题目意思: 某地有s颗卫星,有p个站点,s 1e-9; } void init(){ for(int i = 1 ; i
点击打开链接uva 10397 题目意思:给定n个点,要求找到链接n个点最小路径长度 思路:Prime + 最小生成树 分析: 简单的最小生成树题目,直接套上模板即可 代码: #include #include #inc...
点击打开链接uva 10034 题目意思: 给定n个点的坐标,要求找到最短的路径将这些点链接起来 思路: Prime + 最小生成树 分析: 给定n个点的坐标,要求找到最短路。
点击打开链接hdu 1233 思路:最小生成树 分析:简单的最小生成树的题目,直接上模板 代码: /*法一*/ #include #include #include #include using namespace std; ...
点击打开链接hdu 1232 思路:最小生成树 + 并查集 分析:简单的最小生成树的题目,直接上模板即可。或直接并查集 /*法一:*/ #include #include #include #include using namesp...
最小生成树 1概述: 在一个具有几个顶点的连通图G中,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,代价最小生成树则称为最小生成树。
并查集 1定义:一种简单的用途广泛的集合.并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。
点击打开链接NYOJ 469 1思路:递推2分析:为了简便起见,我们用Ai代表第i个数字 , 由于A1一直是1,所以A2只能是2或3。假设dp[n]表示1->n这个序列的方案数 1.当A2=2时,从A2到An的排列(2~n)相当于从A1到An-1的排列(1~n-1)(把每个数字都加1),一共有dp[n-1]种情况。
点击打开链接hdu 4279 1思路:数学题+找规律2分析: 1这一题的数据范围很大(1---z^63-1),而给定的时间才1s。
点击打开链接hdu 4282 1思路: 枚举z的范围(2-31),然后枚举x的值1->pow(x,z)>=k/2,最后二分查找y的值即可。
有关二进制的几个重点 1 二进制的最高位是符号位,0表示正数,1表示负数 2 正数的原码 反码 补码都一样 3 负数的反码 = 它的原码符号位不变,其它位取反 4 负数的补码 = 反码+1 5 0的补码和反码都是0 6 在计算机内部都是以补码的形式来运算的 7 偶数的二进制最后一位都为0,奇数的最后一位为1 1. & 运算 1&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。
点击打开链接hdu 4287 解题思路: 1思路:暴力+map 2分析:建立一个char 数组用来存储每一个字母对应的数值。然后求出每一个单词的序列,然后利用map查找。
点击打开链接hdu 4278 题目意思: 有一个里程表坏了,这个里程表会直接从2跳到4,7跳到9。现在给定一个历程数值要求我们算出真正的数值。
点击打开链接4268 1题目: Alice and Bob Problem Description Alice and Bob's game never ends.
点击打开链接4272 题目意思:就是和平时玩的连连看类似,只是这里只能找距离小于6的。 解题思路: 1 map版 , 判断当前的水果的个数是否全为偶数 2vector版,直接模拟整个过程即可。