`
Skyming
  • 浏览: 13851 次
社区版块
存档分类
最新评论

KM算法入门

阅读更多
对于并查集: 很多次都是迷迷糊糊,尤其是对并查集的优化:

1.路径压缩  2.按秩合并

对此个人整理了一下:

对于最基本的并查集建议看看:

百度百科:  http://baike.baidu.com/view/521705.htm

以例题的形式分析,并用算法描述了

博客园:   对于有点基础的可以参考下,清晰明了

http://www.cnblogs.com/cherish_yimi/archive/2009/10/11/1580839.html

对于第二个优化按秩合并的部分处理有点异议:

if(rank[x] < rank[y])
              {
                  num[x]=y;
              
              }
              else if(rank[x]> rank[y])
              {
                  num[y]=x;
              }
              else rank[y]++;

看到很多博客上都是这么写的,就连维基百科上也是这么处理的!

个人感觉这样会大大使按秩合并的优化打折,这样处理应该比上面的哪个要严谨多了

           if(rank[x] <= rank[y])
              {
                  num[x]=y;
                  rank[y]+=rank[x];
              }
              else if(rank[x]> rank[y])
              {
                  num[y]=x;
                  rank[x]+=rank[y];
              }

而在sdutoj 2391测试  时间只是略快 
分享到:
评论

相关推荐

    算法竞赛专题解析--杜教筛1

    * pm^{km},其中pi是不同的素数,ki是非零正整数。根据积性函数的性质,可以得到欧拉函数的通解: φ(n) = n * (1 - 1/p1) * (1 - 1/p2) * ... * (1 - 1/pm) 2.3 求解欧拉函数 2.3.1 欧拉筛 欧拉筛是一种线性时间...

    matlab 各种算法例程

    这是matlab的一些算法的例程,方便各位matlab新手入门学习

    算法学习攻略

    7. **二分图**:二分图问题通常与匹配算法相关,例如1325、1469、2195(KM算法或最小费用最大流)和2446、1422、2594。 8. **并查集**:用于处理集合合并和查询问题,推荐1861、1182和1308、2524等题目。 9. **...

    acm经典代码

    【acm经典代码】是为算法入门者设计的一系列编程实践资源,主要涵盖了数论和图论两大领域的经典算法。这些算法在国际大学生程序设计竞赛(ACM/ICPC)中常常出现,对于提升参赛者的算法能力和解题技巧至关重要。 一...

    ACM知识点包含大部分ACM知识点

    KM算法是解决赋权二分图最大匹配问题的一种高级算法,特别适合于边的权重各不相同的情况。 #### 17. 流网络算法 包括Ford-Fulkerson算法和Push-Relabel算法,用于求解最大流问题,如在有容量限制的网络中寻找最大...

    北大值得做的50acm道题

    11. **图 (3), 1325, 1469, 2195 (KM算法)**:这里提到了图论中的一些经典问题及解决方案,如匹配问题等。 12. **2446, 1422 and 2594, ڰ鼯 (2)**:这些题目可能涉及到一些高级数据结构的应用。 13. **1861, 1182...

    杭电ACM训练PPT

    PPT可能会讲解二分匹配的Kuhn-Munkres算法(KM算法)或匈牙利算法。 2. **搜索入门**:搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS),是解决图和树结构问题的基础。这部分可能涉及搜索的基本原理、剪枝...

    poj推荐50题

    - **2195** 和 **2446** 这两道题目则涉及到了 KM 算法或最小费用最大流等更高级的主题,适合那些想要挑战更高难度的学习者。 ### 第八类:并查集 #### 重要性: 并查集是一种数据结构,它可以帮助我们高效地处理...

    典型的c语言求车速问题

    printf("车辆的速度为:%.2f km/h\n", (double)(i - 95859) / 2.0); break; } } return 0; } ``` #### 代码解读 1. **变量声明**: - `int t, a[5];`:t用于循环计数,a数组用于存储数字的各个位数。 - `...

Global site tag (gtag.js) - Google Analytics