摘要:
http://poj.org/problem?id=1182/********************************************************此道题目 前天看的时候一点头绪都没有,看了他人的解题报告后也几乎看不懂,但是首先做了两道并查集的基础题目POJ1611,与POJ2524,熟悉并查集的结构,又做了两道并查集的拓展题目POJ2492与1703,,在充分了解并可以熟悉运用并查集后,此题便可迎刃而解了,也通过此题发现了自学的诀窍“循序渐进”,刚刚AC掉食物链问题,有些小激动,遂发此感慨,呵呵~~~********************************* 阅读全文
摘要:
http://poj.org/problem?id=1703//POJ 1703 几乎和POJ2492一模一样,不再对并查集的建立做解释//参考POJ2492的注释View Code 1 #include<iostream> 2 usingnamespace std; 3 /**********************************************************/ 4 int p[100010],r[100010]; 5 int T,N,M,a,b; 6 char flag; 7 /************************************ 阅读全文
摘要:
View Code 1 /************************************************************/ 2 //并查集的应用推广//POJ2492 3 /************************************************************/ 4 5 #include<iostream> 6 usingnamespace std; 7 // r[i] 0代表r[i]与i同性, 1代表i与r[i]异性 8 int n,p[2002],r[2002]; 9 10 /********************* 阅读全文
摘要:
题目地址:http://poj.org/problem?id=1611/************************************************************************大致题意:一共有n个学生(编号0 至 n-1),m个组,一个学生可以同时加入不同的组。现在有一种传染病,如果一个学生被感染,那么和他同组的学生都会被感染。现在已知0号学生被感染,问一共有多少个人被感染。首先将每个学生都初始化为一个集合,然后将同组的学生合并,设置一个数组num[]来记录每个集合中元素的个数,最后只要输出0号学生所在集合中元素的个数即可。*************** 阅读全文
摘要:
1 /***************************************************** 2 哈希应用 3 将字符串转换成nc进制的数,判断这个数是否重复出现即可 4 其中要将字母转化成对应的数字,因为字母可能不是连续的 5 (这点一定要注意,所以不能单纯的用char[i]-'a'来转化) 6 如nc = 3时可能 会有aeccc这种字符串 7 处理后要将a,c,e,分别代表0,1,2 8 ******************************************************/ 9 10 #include<iostream&g 阅读全文
摘要:
堆排序总结堆排序思想:最大堆的堆顶元素是全部数据中的最大值,输出这个值。再将剩余元素整理成新的最大堆,此时堆顶元素有时又是剩余元素的最大值,再输出这个值。继续这个过程,每次输出堆顶元素,并将剩余元素整理成新的最大堆再输出...堆排序要解决的几个问题1:如何将数据排列成堆的形式——初始堆的建立2:输出堆顶元素后,剩余元素如何再整理成新的堆——堆的整理3:输出元素放在什么位置预备知识:1: 堆中的元素存储在一个数组中,根据堆中的各元素之间具有有序性关系,可以使用二叉树的方式来表示一个堆。因为各元素从前至后存放在数组的钱n 个单元中,所以所画的二叉树实际上是一颗完全二叉树2: 所以根据完全二叉树的性 阅读全文