10 2024 档案
摘要:非常简单的数据结构,一定要注意初始化并查集. 初始化代码. for(int i=1;i<=n;i++) fa[i]=i; 查询合并代码. int fa[N],n; int find(int x){ if(fa[x]==x) return x; return fa[x]=find(fa[x]); }
阅读全文
摘要:对于一个可以用动态规划实现的题目来说我们需要有以下步骤: 1.将原来划分为若干个阶段,每个阶段对应若干个子问题,提取子问题的特征(称为状态). 2.找到每个状态下可能得决策或者是各个状态的转移方式(就是寻找状态转移方程式). 3.按顺序求解每个阶段问题. 基础动态规划问题 最长公共子序列 给定一个长
阅读全文
摘要:定义:在无向连通图中边权和最小的生成树为最小生成树.生成树的定义是在一个无向图中包含所有节点且边数最少的连通子图. Kruskal算法 考虑一种贪心,我们将边权从小到大排列,依次将边加入生成树中,如果此次加边形成了环,则扔掉这条边. 我们可以轻易证明此贪心的正确性,若在某次加入中此条边不是最小生成树
阅读全文
摘要:Kahn算法 找出图中任意入度为 的一个点,将它删除并放入集合 (即让他到达的点的入度减一),最后集合 的顺序就是一个合法的拓扑序列. int a[N],into[N],ma[N][N],n;//a为排序好的拓扑序列,into记录入度,ma存图 bool tops
阅读全文
摘要:本篇文章将介绍一些关于最短路的基本算法. Floyd算法 处理全源最短路问题,时间复杂度较高,容易实现,时间复杂度 . //n表示节点总数,f[i][j]表示i到j的最短路径 for(int k=1;k<=n;k++){//表示仅允许经过节点1-k for(int i=1;i<
阅读全文