随笔分类 - 数据结构
并查集,树状数组,优先队列,RMQ。。。
摘要:题目链接:http://codeforces.com/contest/816/problem/B 题目意思:给出 n 个recipes,第 i 个(1<= i <=n)recipes 表明 coffee 调制的推荐温度范围是 [li, ri] 之间。现在有 q 个问题,每个问题需要回答 coffee
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/501/C题目意思:有 n 个点,编号为 0 ~ n-1。给出 n 个点的度数(即有多少个点跟它有边相连)以及跟它相连的点的编号的异或结果。最后需要输出整幅图的所有边的情况。 这道题确实是一道很好的题目!!...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556题目意思:有 n 个气球从左到右排成一排,编号依次为1,2,3,...,n。给出 n 对 a, b,表示编号为 a ~b 的气球被涂过一次色。n 次之后,问所有气球被上色的次数分别是多少。 典型的...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896题目意思:给出 n 块石头的初始位置和能到达的距离。对于第奇数次遇到的石头才抛掷,偶数次的就忽略。问最多能扔到多远。如果有多颗石头在一个位置,距离小的那个标记为先遇到的。 所以先解说一下第二个测试...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1972题目意思:需要模拟打印机打印。打印机里面有一些 job,每个job被赋予1~9的其中一个值,越大表示优先级越高,越早被打印。job这个队列是会向前推进的,如果排在最前面的job优先级最高,那么才打印...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2051题目意思:题目有点难理解,所以结合这幅图来说吧~~~~ 有一个叫Argus的系统,该系统支持一个 Register 命令,输入就是类似样例中的: Register 2004 200 代表编号为 2004 的 Register...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1195题目意思:有一部 mobie phone 基站,它的面积被分成一个个小正方形(1 * 1 的大小),所有的小正方形的面积构成了一个 S * S 大小的矩阵(下标都是从 0 ~ S-1 变化的)。 有四种指令: 第 一 行的指令...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541题目意思:有 N 颗星星,每颗星星都有各自的等级。给出每颗星星的坐标(x, y),它的等级由所有比它低层(或者同层)的或者在它左手边的星星数决定。计算出每个等级(0 ~ n-1)的星星各有多少颗。 ...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166题目意思:给出 N 个数你,通过对某些数进行更改(或者 + 或者 -),当输入的是 Query 的时候,需要计算出 某个区间的和。 树状数组第一题,算是模板吧 ^_^ 这个人写得比较容易理解:h...
阅读全文
摘要:题目链接:http://poj.org/problem?id=3368题目意思:给出一段 n 个数的序列你,对于区间 [l, r] 的询问,找出 出现频率最高的数的次数。考虑到序列中的数是非递减的,也就是相同的数会连续不间断地在一起,于是就才有了代码中这个部分来预判了: if (s > t) ...
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/445/B题目意思:给出 n 种chemicals,当中有 m 对可以发生反应。我们用danger来评估这些chemicals的厉害程度。厉害程度是这样的:一瓶什么都不加的瓶子的danger 为 1,如果有一...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 常规的方法是对输入的数从大到小进行排序(可以用sort或qsort),然后输出前m大的数。 不过此题实质上是hash的入门题。建立一个比较大的数组,然后把这些数通过hash函数计算映射到这个数组里面(这里hash函数是 tmp + 500000,tmp是输入的n个数中任意的一个数),考虑到这些数是各不相同的,因此不需要考虑冲突问题。 1 #include 2 #include 3 using namespace std; 4 5 const int maxn = 1e6 + 5; 6 ...
阅读全文
摘要:题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的。 0 表示没有连通;1代表已连通。在已连通村庄的道路的基础上,找到扩展出来的最小生成树。 1 #include 2 #include 3 using namespace std; 4 5 const int maxe = 10000 + 10; 6 int rep[maxe], vis[maxe]; 7 8 struct sets 9 {10 int v1, v2;11 int value;1...
阅读全文
摘要:题目链接:http://poj.org/problem?id=2421实际上又是考最小生成树的内容,也是用到kruskal算法。但稍稍有点不同的是,给出一些已连接的边,要在这些边存在的情况下,拓展出最小生成树来。 一般来说,过到这四组数据大体上就能AC了。 1、题目给出的案例数据 2、连接的道路可能把所有的村庄都已经连通了 3、两个村庄给出多次,即连接这两个村庄的道路是重复的!。2、3这两种情况的数据如下(为了好看,自己出了一组,当然Sample Input 那组也行):情况2(所有村庄已连通): 情况3: 还有第4种情况: 1 #include 2 #include 3 using...
阅读全文
摘要:题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1233并查集的运用, 实质就是求最小生成树。先对所有的村庄距离从小到大排序,然后判断村庄之间是否属于同一集合,不是则将距离相加。属于同一集合,说明村庄连成了环,就不符合树的定义了。这样扫描下来,就求得最小生成树了。 要特别注意的是,数组越界问题。这个得益于Dwylkz的指点。由于村庄最多假设为100,为了防止边数越界,数组应该开到100 * 100 (10000)左右。 1 #include 2 #include 3 using namespace std; 4 5 const int ma...
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 有关系(直接或间接均可)的人就坐在一张桌子,我们要统计的是最少需要的桌子数。并查集的入门题,什么优化都无用到就可以直接过。实质上就是统计总共有多少个不相交的集合。比较可恶的是,题目中 There will be a blank line between two cases 是骗人的!!! 1 #include 2 using namespace std; 3 4 const int maxn = 1000 + 5; 5 int p[maxn], rank[maxn]; 6 7 int ...
阅读全文
摘要:题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=19&page=show_problem&problem=1645题意:题目实质要我们求的是使集合连成环的所有pairs数。可以把每个元素看成顶点,则构成一个简单化合物就在两个元素间连成一条边。当整个图存在环的时候,组成环的边对应的化合物是危险的,反之就是安全的。 这样,我们可以用一个并查集来维护图的连通分量集合,每次得到一个简单化合物(x, y)时就检查x和y是否在同一集合中。如果
阅读全文
摘要:题目链接:http://poj.org/problem?id=2524实质上就是算经过所有的连边后,共有多少个不相交的集合。 我采取的方法和解决1611 The suspects的方法是相同的。读者可以参考下。这里只讨论经过两次merge处理之后,怎样统计不相交集合的个数。先用sort将所有元素的祖...
阅读全文
摘要:题目链接:http://poj.org/problem?id=1611题意:给定n个人和m个群,接下来是m行,每行给出该群内的人数以及这些人所对应的编号。需要统计出跟编号0的人有直接或间接关系的人数总共有多少。 这又是一条并查集的应用。难点是如何统计出与0有关系的总人数,即包含0的集合内元素的总个数。我的方法是用了两次merge,第一次merge单纯地将同一群内的元素连边,当然该群内的元素的祖先有可能是别的群内的元素,连边的规则是大的元素指向小的元素;第二次merge则把第一次筛选出来的集合中将元素与它的祖先再合并。目的是为了每一个集合内的元素都指向同一个代表。 以第一个数据测试来说,第二行的
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 第二条并查集,和畅通工程的解法类似。判断小希的迷宫不符合条件,即有回路。我的做法是,在合并两个集合的时候,当fx = fy,即有共同祖先的时候,说明就有回路。 这题有三点要注意:1、格式问题。题目说的“每两组数据之间有一个空行。”是会PE的!!实际上输出Yes或No之后加多个\n即可,不需要再画蛇添足再输多一个换行。 2、当整数对列表只有0 0 时,要输出Yes 3、当不相交的集合个数>=2时,也是不符合条件的,要输出No 1 #include 2 #include 3 #includ
阅读全文

浙公网安备 33010602011771号