设为首页 加入收藏

TOP

编程算法 - 食物链 并查集 代码(C)
2015-01-22 21:12:08 来源: 作者: 【 】 浏览:15
Tags:编程 算法 食物链 查集 代码

食物链 并查集 代码(C)

?

?

题目: 有N只动物, 分别编号为1,2,...,N. 所有动物都属于A,B,C中的一种. 已知A吃B, B吃C, C吃A.

按顺序给出两种信息K条.

第一种: x和y属于同一类.

第二种: x吃y.

信息之间可能会出错和矛盾, 求不正确的信息数.

?

例如:

有N=10只动物, 给定K=7条信息.

(1) 1: x=101, y=1; 出错:没有101的动物.

(2) 2: x=1, y=2; 动物1吃动物2.

(3) 2: x=2, y=3; 动物2吃动物3.

(4) 2: x=3, y=3; 出错, 动物3不能吃动物3.

(5) 1: x=1, y=3; 出错, 动物1和动物3属于同一种, 与(2)(3)矛盾.

(6) 2: x=3, y=1; 动物3吃动物1.

(7) 1: x=5, y=5; 动物5和动物5属于同一种.

result = 3, 即(1)(4)(5)出错.

?

使用并查集(disjoint set)求解.

创建3*N个元素的并查集.每一组表示元素i可能属于的种类x, 共3种.

然后合并并查集. 找到矛盾信息.

?

代码:

?

/*
 * main.cpp
 *
 *  Created on: 2014.7.20
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 
  
   

/*
 * main.cpp
 *
 *  Created on: 2014.7.20
 *      Author: spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; class DisjoinSet { static const int MAX_N = 10000; int par[MAX_N]; int rank[MAX_N]; public: void init(int n) { for (int i=0; i
        
        输出:
        

?

?

ans = 3


?

?

/

?

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇编程算法 - 划分数 代码(C) 下一篇C和指针 (pointers on C)――第..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: