MST

计蒜客--T1229--Set

青春壹個敷衍的年華 提交于 2020-03-11 09:50:41
题目描述: 现有一整数集(允许有重复元素),初始为空。我们定义如下操作: add x 把 x加入集合 del x 把集合中所有与 x 相等的元素删除 ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下输出。 add 输出操作后集合中 x 的个数 del 输出操作前集合中 x 的个数 ask 先输出 0 或 1 表示xx 是否曾被加入集合(0 表示不曾加入),再输出当前集合中 x 的个数,中间用空格格开。 输入描述: 第一行是一个整数 nn,表示命令数。0≤n≤100000。后面 n行命令,如 Description 中所述。 输出描述: 共 n 行,每行按要求输出。 输出时每行末尾的多余空格,不影响答案正确性 输入: 7 add 1 add 1 ask 1 ask 2 del 2 del 1 ask 1 输出: 1 2 1 2 0 0 0 2 1 0 题意: 字面意思 题解 : set搞一搞 代码: # include <set> # include <cstdio> # include <iostream> # include <algorithm> # include <cstring> using namespace std ; char s [ 4 ] ; int main ( ) { multiset < int > mst ; set < int >

【图论】最小生成树算法(prim和kruskal详解及对比)

心已入冬 提交于 2020-03-02 10:32:06
目录 一.最小生成树之 p r i m prim p r i m 算法 p r i m prim p r i m 完整代码(计算最短距离并输出路径) 堆优化版本 二.最小生成树之 k r u s k a l kruskal k r u s k a l 算法 k r u s k a l kruskal k r u s k a l 完整代码(计算最短距离并输出路径) 三. p r i m prim p r i m 和 k r u s k a l kruskal k r u s k a l 相对比 1. 1. 1 . 时间上 2. 2. 2 . 空间上 3. 3. 3 . USACO07DEC道路建设 B u i l d i n g R o a d s Building Roads B u i l d i n g R o a d s ( p r i m prim p r i m 算法+堆优化与 K r u s k a l Kruskal K r u s k a l +路径压缩对比) 一.最小生成树之 p r i m prim p r i m 算法 Prim算法适用于稠密图 Kruskal适用于稀疏图 M S T MST M S T ( M i n i m u m S p a n n i n g T r e e Minimum Spanning Tree M i n i m u m S p

算法导论——最小生成树:Kruskal算法(利用了并查集)

醉酒当歌 提交于 2020-01-07 15:11:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> package org.loda.graph; import org.loda.structure.MinQ; import org.loda.structure.Queue; import org.loda.util.In; /** * * @ClassName: KruskalMST * @Description:Kruskal最小生成树算法 * @author minjun * @date 2015年5月25日 下午10:50:01 * */ public class KruskalMST { private Queue<Edge> mst; private double weight; public KruskalMST(WeightGraph g){ int v=g.v(); mst=new Queue<Edge>(); MinQ<Edge> q=new MinQ<Edge>(); UF uf=new UF(v); //将所有边添加到优先队列中 for(Edge edge:g.edges()){ q.offer(edge); } while(!q.isEmpty()){ Edge edge=q.poll(); int a=edge.oneSide(); int b=edge.otherSide(a);

「SDOI2019」世界地图

你。 提交于 2020-01-03 20:02:24
Address loj3112 luogu P5360 bzoj5531 Solution 对于 1 ≤ i ≤ m 1\leq i\leq m 1 ≤ i ≤ m ,考虑分别预处理经度在 [ 1 , i ] [1,i] [ 1 , i ] , [ i , m ] [i,m] [ i , m ] 的点的 MST \text{MST} MST 。询问的时候合并 [ 1 , l − 1 ] [1,l-1] [ 1 , l − 1 ] 和 [ r + 1 , m ] [r+1,m] [ r + 1 , m ] 即可。 先考虑怎么预处理 [ 1 , i ] [1,i] [ 1 , i ] 的 MST \text{MST} MST ( [ i , m ] [i,m] [ i , m ] 同理)。 假设我们已经有了 [ 1 , i − 1 ] [1,i-1] [ 1 , i − 1 ] 的 MST \text{MST} MST ,现在要在这里加上经度为 i i i 的点和一些边。 考虑加入一条边 ( u , v , w ) (u,v,w) ( u , v , w ) 会发生什么: 1. 1. 1 . u , v u,v u , v 不连通,连接 u , v u,v u , v 。 2. 2. 2 . u , v u,v u , v 已经连通,且路径 u → v u→v u → v 的边的最大值

最小生成树Prim算法理解

吃可爱长大的小学妹 提交于 2019-12-15 01:37:03
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从 点的方面 考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。因为有N个顶点,所以该MST就有N-1条边,每一次向集合V中加入一个点,就意味着找到一条MST的边。 用图示和代码说明: 初始状态: 设置2个数据结构: lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说明以i为终点的边的最小权值=0,也就是表示i点加入了MST mst[i]:表示对应lowcost[i]的起点,即说明边<mst[i],i>是MST的一条边,当mst[i]=0表示起点i加入MST 我们假设V1是起始点,进行初始化(*代表无限大,即无通路): lowcost[2]=6 , lowcost[3]=1 , lowcost[4]=5 , lowcost[5]=*, lowcost[6]=* mst[2]=1 , mst[3]=1, mst[4]=1 ,

最小生成树算法(未完成)

▼魔方 西西 提交于 2019-12-04 02:12:09
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。 两个最小生成树(Minimum Spanning Tree, MST)算法完全等价。 如果输入邻接矩阵,一般用Prim。 如果输入边表,一般用Kruskal。 1.Kruskal算法 时间复杂度和把所有边排序的复杂度一样,为 O(m \log m) O ( m log m )。 如果只需要求最小生成树的最大边的权值,可以在 O(m) O ( m )的时间内求出。 (二分,每次丢掉一半) 此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。 1. 把图中的所有边按代价从小到大排序; 2.

Prime算法

匿名 (未验证) 提交于 2019-12-03 00:03:02
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从 点的方面 考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。因为有N个顶点,所以该MST就有N-1条边,每一次向集合V中加入一个点,就意味着找到一条MST的边。 原文链接:https://blog.csdn.net/yeruby/article/details/38615045 下面用图和代码来解释: 我们首先定义一个数组:lowcost[i]; 我们初始将V1作为起点 ,那么lowcost[2] = 6,lowcost[3] = 1,lowcost[4] = 5,lowcost[5] = inf,lowcost[6] = inf;(其中inf=0x7ffffff,i指的是以i为终点的路径的长度,若没有一步可达的路径那么就赋值为inf) 我们明显可以看出,以V3为终点的路径最短那么就将V3加入集合V中,lowcost[2]=5, lowcost[3]=0

Mobx vs Mobx State Tree(MST)

匿名 (未验证) 提交于 2019-12-02 23:45:01
Mobx State Tree(MST)他建立在MobX的基础之上, MobX速度快,但不提供开箱即用的任何组织结构,因此集中获取整个状态的快照, 从快照中的恢复状态,时间旅行要么不可行,要么由开发人员手动支持。 MST通过将单独的存储组织到交互式和交互式节点的单个树中来支持所有上述功能。 MST的中心是活树的概念。该树由可变但受严格保护的对象组成,这些对象富含运行时类型信息。换句话说,每个树具有形状(类型信息)和状态(数据)。 从这个活树中,自动生成不可变的,结构上共享的快照。 然而,所有这些都需要付出一些代价,而MST通常比纯MobX慢一些。因此,不需要这些功能,请只使用MobX。

lecture 10.21

拥有回忆 提交于 2019-12-01 23:47:47
1. 算法检测所给graph是否有Euler Path a) 假设点都是连续的 b) 假设每点的degree是已知的,我们不需要一个点一个点的数 O(1) 假设degree需要自己计算,每个vertex的cost是O(V), 总cost是O(V^2) c) 用循环检测所有vertices O(V) 2. 通常array of edges最高效,adjacency matrix占地方最多 3. comman name and silly name & and/snowman * star/spider " double quote/rabbit-ears ^ hat/shark-fin @ at/spider monkey(German),cabbage ! exclamation/wow # hash/grid % percent sign,mod/grapes 4. reachable: can find a path from v to w(directed) 5. 6. transitive closure 通过haspath(G, s, t), 利用DFS, BFS 7. Warshall's algorithm: 如果tc[s][i]=1, tc[i][t]=1, 则tc[s][t]=1 computation of transitive closure: V^3 8.

面向未来的前端数据流框架 - dob

百般思念 提交于 2019-11-30 14:44:55
我们大部分对内产品,都广泛使用了 dob 管理前端数据流,下面隆重介绍一下。 dob 是利用 proxy 实现的数据依赖追踪工具,利用 dob-react 与 react 结合。 dob 的核心思想大量借鉴了 mobx ,但是从实现原理、使用便捷性,以及调试工具都做了大量优化。 特征 ✅ 支持 ❌ 不支持 📦 生态支持 🤷 不完全支持 功能 redux mobx dob 异步 📦 redux-thunk 等 ✅ ✅ 可回溯 ✅ 📦 mst ✅ 分形 🤷 replaceReducer ✅ ✅ 代码精简 📦 dva 等 ✅ ✅ 函数式 ✅ 🤷 🤷 面向对象 🤷 ✅ ✅ Typescript 支持 🤷 ✅ ✅ 调试工具 ✅ ✅ ✅ 调试工具 action 与 UI 双向绑定 ❌ 🤷 ✅ 严格模式 ✅ ✅ 支持原生 Map 等类型 ❌ ✅ observable 语法自然度 ❌ ✅ store 规范化 ✅ 🤷 ✅ 从依赖追踪开始 dob 自己只实现了依赖追踪功能,其特性非常简单,如下示意图+代码所示: img import { observable, observe } from "dob" const obj = observable({ a : 1 , b : 1 }) observe( () => { console .log(obj.a) }) 一句话描述就是:由