practice again
文章平均质量分 71
focus_best
这个作者很懒,什么都没留下…
展开
-
UVA 1203 Argus(优先队列)
UVA 1203 Argus(优先队列)题意:给你多个命令,每个命令如Register 2004 200 对应于编号为2004的事件,每隔200秒发生一次(首次发生是在200秒).然后在给你一个K,要你输出前K个发生事件的编号.如果几个事件同时发生,输出事件编号小的.分析:刘汝佳训练指南P188例题. 本题只需要维护一个优先队列即可,每次从队列中取出时间最小且编号最小的事件,输出其编原创 2014-04-21 13:12:43 · 1647 阅读 · 0 评论 -
UVA 11995 I Can Guess the Data Structure!(STL应用)
UVA 11995 I Can Guess theData Structure!(STL应用)题意:现在有一个数据结构s,对应两种操作: 1 x表示存放x入s. 2 x表示从s中无错的取出了x.现在要你判断s的类型是:栈,队列还是优先队列(数值大的先出),不确定或者不可能.分析:刘汝佳:训练指南P186例题. 由于STL已经封装了这3种数据结构,我们只要分别建立这3种数据结原创 2014-04-20 22:48:45 · 952 阅读 · 0 评论 -
UVA 11997 K Smallest Sums(优先队列)
UVA 11997 K Smallest Sums(优先队列)题意:给你一个整数K,并且给你K组数,每组K个数,现在在每组中任取一个数,然后相加可以得到一个和,这样的和共有K^K个.要你输出最小的K个和.分析:刘汝佳:训练指南P189例题. 现在简化问题,假设只有2组数,每组K个我们如何求出最小的K个呢?如A[1…K]与B[1…K]. 穷举法要K^2的复杂度原创 2014-04-21 14:02:09 · 1214 阅读 · 0 评论 -
UVA 11020 Efficient Solutions(C++STL应用)
UVA 11020 Efficient Solutions(C++STL应用)分析:详解请看刘汝佳的训练指南P228:优势人群.首先将所有读入的(x,y)点用多重集multiset保存,按照x小放前面,如果x值相等,则y值小的放前面.假设当前处理的是(xi,yi),那么用用lowbound函数找到(xi,yi)的上确界s位置,如果s位置是多重集的开头,则直接插入.如果s不是开头,这原创 2014-03-24 12:55:28 · 1230 阅读 · 0 评论 -
HDU 1022 Train Problem I(判断出栈序列是否可行)
HDU1022 Train Problem I现在有一组数字序列,该序列中每个数字都是1到n之间的数,其中n输入实例:3 123 3213 123 312输出实例:Yes.inininoutoutoutFINISHNo.FINISH输入:输入包含多个实例。每个实例第一个数字为n,接下来是进栈的数字顺序,然后是要求的出栈数字顺序。原创 2014-02-14 20:39:02 · 1091 阅读 · 0 评论 -
POJ 3368 Frequent Values(RMQ)
UVA 11235 Frequent Values(RMQ)分析:刘汝佳:训练指南P1981. 本题主要思想是把输入序列分成一段段由相同值构成的序列,然后对于每个查询[L,R]看他覆盖了那些段,只要再这些连续的段范围内找出现的最大值即可,即RMQ问题2. 由于a[n]是升序排列的,所以给a数组游程编码为(v,num)其中v是a[i]的值,num是v这个相同的值出原创 2014-03-21 13:38:15 · 1220 阅读 · 0 评论 -
POJ 3264 Balanced Lineup(简单RMQ)
POJ 3264 Balanced Lineup(简单RMQ)分析:RMQ问题的简单应用。AC代码:1641ms#include#include#includeusing namespace std;const int MAXN=50000+1000;int dmax[MAXN][20];int dmin[MAXN][20];int d[MAXN];void initM原创 2014-03-21 14:23:53 · 1082 阅读 · 0 评论 -
HDU 4496 D-CITY(并查集)
HDU4496 D-CITY(并查集)题目描述:给出一个有N(0输入:第一行是N和M,然后是M行数(X,Y)(0输出:依次输出所求的连通分量数。分析:当删除前K条边时图所剩的连通分量数就是N个孤立的点只添加后M-K跳边时,所具有的连通分量数。所以仅需倒叙插入每条边,分别保存插入边后有的连通分量数在数组内,然后输出数组即可。AC代码中未加while(scanf("%d%d",原创 2014-01-14 22:53:06 · 1379 阅读 · 0 评论 -
HDU 4122 Alice's mooncake shop(RMQ:动态最值)
HDU 4122 Alice's mooncake shop(RMQ)分析:大致思想就是读入时间,然后换算成从0到M-1之间的第x个小时,然后在【x-T,x】区间内用RMQ查找生产月饼的最小成本。然后用最小成本乘以月饼数即是该条order的成本了。不过这里查询最小值函数getMin返回的是最小成本的编号i,而且比较最小值的函数也要自己写过,并不是单纯的比较值而且要考虑S(即保存成本)和原创 2014-03-22 17:19:56 · 948 阅读 · 0 评论 -
HDU 1213 How Many Tables(并查集)
HDU1213 How Many Tables现在给你由1到N个数字组成的M对整数对,问你有多少个连通分量。每对整数X和Y(X不等于Y)表示X和Y在一个连通分量里面。输入:首先是T(1输出:连通分量个数。分析:直接读取数据,判断即可。AC代码:0ms #include#include#includeusing namespace std;const int MAXN原创 2014-03-09 11:16:59 · 1090 阅读 · 0 评论 -
ZOJ 3041 City Selection(二维比较,排序分析)
ZOJ 3041 City Selection(二维比较,排序分析)http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3041题意: 现在有m个工厂和n个可建城市的地点,如果有一个工厂在一个地点的左上角,那么该地点就不可以建城市.现在要你输出所有可以建城市的点.分析: 对于这种需要2原创 2014-09-24 20:28:39 · 1576 阅读 · 1 评论 -
HDU 1198 Farm Irrigation(并查集)
HDU 1198 Farm Irrigation题目大意,给你一个N*M的矩阵,有11种格子,每个格子互联的部分不同,问你矩阵一共有几个连通分量。输入:每个实例第一行是N和M,1 输出:连通分量个数。分析:从上到下,从左到右一个一个格子分析,如果当前格子连通上方且它上面已经有格子(且该格子也连通了当前格子),那么它属于上面那个连通分量,如果当前格子连通左边,且它左边还有格子(且该格原创 2014-03-08 21:33:25 · 1234 阅读 · 0 评论 -
UVA 1160 X-Plosives(并查集)
UVA 1160 X-Plosives现在手上有一些化合物,每个化合物都不同且由两个整数构成,当你手上存在这种情况时:手上有至少N(N>2)个化合物且其中有N个化合物正好包含N个不同的整数(即这N个整数每个出现了2次)。那么此时化合物不稳定。比如你有化合物1和2,2和3,3和1那么就是不稳定的,但是你有1和2,2和3 那么就是稳定的。现在给出所有化合物给你的顺序,你要保证不会出现化合物原创 2014-03-08 23:39:17 · 1264 阅读 · 0 评论 -
HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
HDU 1272 小希的迷宫上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把原创 2014-03-09 13:32:37 · 1355 阅读 · 0 评论 -
HDU 1232 畅通工程(并查集)
HDU 1232 畅通工程Time Limit: 4000/2000 MS(Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25811 Accepted Submission(s): 13493Problem Description某省调查城镇交通状况,得到现有城镇道路原创 2014-03-09 11:35:43 · 941 阅读 · 0 评论 -
ZOJ 3659 Conquera New Region(并查集:维护根节点信息)
ZOJ3659 Conquera New Region现在有N个城市,N-1条路构成的树。C(i,j)表示如果城市i和城市j之间有一条路,那么他们之间路的容量。S(i,j)表示从i到j的一条路线的最大容量,其等于从i到j的所有路中的最小容量。现在要找一个城市,使得它到其他N-1个点的S值之和最大。输入:多组实例。每个实例第一个为N. (1 ≤ N ≤ 200,000),接下来有N-1行,为原创 2014-03-09 19:06:49 · 1326 阅读 · 1 评论 -
POJ 1611 The Suspects(并查集)
POJ1611The Suspects(并查集)现在有n个学生(从0号到n-1号),其中0号学生是有可能非典的,只要和被怀疑有非典的学生在一个社团的学生都是有可能有非典的且需要被隔离,但是学校有很多社团,所以现在要你求一共有多少学生需要被隔离?输入:多组实例.每个实例第一行n和m (0 输出:需要被隔离的学生数.分析:所有学生被处理前都是独立的连通分量,以自己作为根.只要读入一个社原创 2014-03-11 11:17:28 · 1471 阅读 · 0 评论 -
POJ 2236 Wireless Network(并查集)
POJ2236 Wireless Network(并查集)分析:每修复一台电脑,就把它并入距离它不差过D距离的连通分量,并和并这些所有的连通分量.每次查询只需要看被查询的两台电脑是否在同一个连通分量即可.现在问题就是如何快速的知道任何一个点附近距离它不超过D的所有其他点?直观方法:用两个for来遍历每一个点,求他们之间的距离.用vector保存每个点附近距离不超过D距离的顶点编号.(点原创 2014-03-12 10:35:49 · 1401 阅读 · 0 评论 -
POJ 1785 Binary Search Heap Construction(RMQ)
POJ 1785 Binary Search Heap Construction(RMQ)http://poj.org/problem?id=1785题意:给你每个节点的两个信息:string值和r优先级。要求你构建一个Treap并且任意节点的string和r都是唯一的。最后按要求输出该Treap即可。分析:直接构建Treap即可,不过树中的节点v值要改为string类型了。本来想用T原创 2014-04-23 16:47:27 · 1043 阅读 · 0 评论 -
POJ 2752 Seek the Name, Seekthe Fame(KMP:后缀与前缀)
POJ 2752 Seek the Name, Seekthe Fame(KMP:后缀与前缀)http://poj.org/problem?id=2752题意:给你一个串T,找出串T的子串,该串既是T的前缀也是T的后缀.分析: 首先要知道KMP的next[i]数组求得的数值就是串T中的[1,i-1]的后缀与串T中的[0,i-2]前缀的最大匹配长度.本题肯定要输出串T的长原创 2014-04-06 12:32:28 · 1265 阅读 · 0 评论 -
HDU1540 Tunnel Warfare(线段树:维护最大连续子串)
HDU1540 Tunnel Warfare(线段树:区间合并)http://acm.hdu.edu.cn/showproblem.php?pid=1540分析: 首先先来分析题目中的3种操作:1.D x: 该操作就是单点更新2.Q x: 该操作可以分解为查区间[1,x]的最大连续0后缀长L和区间[x,n]的最大连续0前缀长R,则R+L-1即为所求.有关前缀查询和后原创 2014-03-29 19:18:43 · 1738 阅读 · 1 评论 -
UVA 11992 Fast MatrixOperations(线段树)
UVA 11992 Fast MatrixOperations(线段树)http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18697分析:详解见刘汝佳 训练指南P207 可以看到题目中的矩阵最多20行,但是却最多有100W元素,所以可以想到对于矩阵每行维护一棵线段树就行. 线段树维护的信息:有原创 2014-04-01 13:04:43 · 1186 阅读 · 0 评论 -
HDU 2888 Check Corners(简单二维RMQ)
HDU 2888 Check Corners(简单二维RMQ)分析:基本的二维RMQ应用.注意题目中存的矩阵是无符号整数的矩阵.AC代码:3625ms#include#include#includeusing namespace std;const int MAXN =305;unsigned int val[MAXN][MAXN];unsigned int原创 2014-03-24 16:31:39 · 1066 阅读 · 0 评论 -
POJ 3080 Blue Jeans(KMP:最长连续公共子序列)
POJ 3080 Blue Jeans(KMP)http://poj.org/problem?id=3080题意:给你n个字符串,要你求出这n个字符串的最长公共连续子序列是哪个,如果存在多个最长的,就输出字典序最小的那个.分析: 本题只需要枚举第一个串的长度>=3的所有字串,然后用该字串KMP匹配其他剩下n-1个串,看看能否找到匹配点即可. 本题枚举字串原创 2014-04-06 13:31:22 · 1988 阅读 · 1 评论 -
HDU 2594 Simpsons’ HiddenTalents(KMP:后缀与前缀)
HDU 2594 Simpsons’ HiddenTalents(KMP:后缀与前缀)http://acm.hdu.edu.cn/showproblem.php?pid=2594题意:给定两个串S1和S2,你要找到S1的最长前缀,且这个前缀还要是S2的后缀.分析:本题只需要利用KMP计算串S2的后缀能匹配S1的前缀是多长即可.这就是KMP计算ex数组的功能.AC代码:#incl原创 2014-04-05 15:48:39 · 1046 阅读 · 0 评论 -
HDU 3183 A Magic Lamp(贪心 or RMQ)
HDU 3183 A Magic Lamp(贪心+RMQ)分析:1. 首先考虑对于n个数字组成的数,只删除1位的情况。比如176832,删除一位使得剩下的数值最小。结果是删除7而不是删除8所以可知并不总是删除最大的那个数字。一种可行的贪心策略是:对于n位数构成的数删除m位,每次总是删除这样的a[i]:它是第一个a[i]>a[i+1]的数,如果不存在则就删除a[n]。详见原创 2014-03-21 16:34:17 · 1295 阅读 · 0 评论 -
POJ 2019 Cornfields(简单二维RMQ)
POJ2019 Cornfields(简单二维RMQ)分析:基本的二维RMQ查询.类似于二维树状数组问题,二维RMQ问题就是求一个矩阵N*M中的一个小块矩阵内的最值问题.其中dmin[i][j][ii][jj]=x表示以(i , j)为左上角,以( i+(1为右下角的矩阵内的最小值.dmax的值类似. 下面dmin[i][j][ii][jj]的值如何求呢?首先我们知道原创 2014-03-24 15:51:36 · 1632 阅读 · 0 评论 -
UVA 11991 Easy Problem from Rujia Liu?(STL应用)
UVA 11991 Easy Problem fromRujia Liu?(STL应用)题意:给你n个数(n分析:刘汝佳:训练指南P187例题. 首先我们可以直接用vector来实现这个数据结构.如定义vector data[1000000],然后每个询问直接回答data[v][k-1]即可.但是数只有10W个,我们定义100W的vector每组数据初始化的时间太长可能会超原创 2014-04-20 23:18:28 · 895 阅读 · 0 评论 -
POJ 1456 Supermarket(贪心算法,可用并查集优化)
POJ 1456 Supermarket(贪心算法)分析:对于当前集合中最大利益的商品肯定要安排,且要安排在它的截止时间点卖出.可以证明上述选择不会丢失最优解,因为首先最大利益的商品一定不能放弃,否则可以用这个商品替代它截止时间上卖的那件商品.其次如果存在最优解使得最大商品放在它截止时间点前面买,此时它截止时间上卖的是另外一个商品,那么互换这两件商品,依然是最优解.将所有商品按利润从大原创 2014-03-12 17:19:59 · 1384 阅读 · 0 评论 -
ZOJ 3261 Connections in GalaxyWar(并查集:离线处理)
ZOJ3261 Connections in GalaxyWar(离线处理+并查集)分析:如果有一条边连接两个点,那么将能量小的根连接到能量大的根上.始终保持一个连通分量的根的能量最大.本题还需要预先读入所有数据,进行离线处理.WA了好久,题意理解错误. 如果根不是自己但是根的能量和自己一样,照样不能作为求援对象.AC代码:160ms #include#include#in原创 2014-03-13 13:58:04 · 1154 阅读 · 0 评论 -
POJ 2253 Frogger(并查集+二分)
POJ 2253 Frogger(并查集+二分)http://poj.org/problem?id=2253题意:给你N个石头的坐标(x,y),现在青蛙要从第一个石头跳到第二个石头上去,但是青蛙每次最大的跳跃距离有限制.所以现在问你青蛙从第一个石头跳到第二个石头的最短跳跃距离是多少?分析: 网上说这题有最短路径解的,生成树解的.本来我是冲着最短路径解法来的,但是看了一遍原创 2014-07-11 18:25:32 · 1514 阅读 · 0 评论 -
ZOJ 3321 Circle(并查集)
ZOJ 3321 Circle(并查集)http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3321题意: 给你一个n节点m条边的无向图,问你该图是否正好是一个环?分析: 无向图是一个简单环 充要条件是 所以节点的度数==2且图连通. 所以我们只需要记录每个节点的度且用原创 2014-09-22 12:20:39 · 1900 阅读 · 2 评论 -
POJ 2524 Ubiquitous Religions(并查集)
POJ 2524 Ubiquitous Religions(并查集)题目大意:给你n个节点和m条边,然后问你有多少个连通分量.分析:每读入一条边,如果这条边的两个点不在一个连通分量,那么总的连通分量数目就减少1.初始连通分量有n个.AC代码:344ms#include#includeusing namespace std;const int MAXN=50000+100;i原创 2014-03-12 16:10:44 · 1036 阅读 · 0 评论 -
HDU 1325 POJ 1308 Is It ATree?(并查集)
HDU 1325 POJ 1308 Is It ATree?(计算树的入度)一棵树是一个数据结构,它要么是一个空要么是满足下面特性的结构:1. 只有一个根节点,这儿根节点没有入度.2. 除了这个根节点其他所有的节点都只有一个入边(指向它的边).3. 从根节点到任意其他的节点有且仅有一条路现在给你一颗树的所有有向边,然后问你这个树是不是一颗合法的树.输入:多原创 2014-03-11 00:54:42 · 1269 阅读 · 0 评论 -
UVA 1329 Corporative Network(并查集:路径压缩)
UVA1329 Corporative Network初始时有n个点,每个点都没有父节点,然后依次执行下面两条命令:I u v :把节点u的父亲设置为v,并且设u节点到v的距离为|u-v|%1000,输入保证执行I命令的时候,u没有父节点。E u:查询u节点到根节点的距离。输入:首先是T,表示实例个数。每个实例第一行是n(5输出:对于每条E指令,输出查询结果。分析:对于每条原创 2014-03-09 00:19:33 · 1203 阅读 · 0 评论 -
HDU 3308 LCIS(线段树:单点更新,求最大连续子串)
HDU 3308 LCIS(线段树:单点更新,区间合并)分析: 首先题目中找的递增序列是严格增加的,如果有7,7这样的序列不算递增.其次本题是单点更新,所以不用PushDown,只用PushUp就行. 线段树维护信息:val(表节点的值,只有子节点有用,这个信息也可以不维护的),sub(最长上升子序列的长度),pre(最长上升前缀的长度),suf(最长上升后缀的长原创 2014-03-28 18:58:10 · 2473 阅读 · 0 评论 -
HDU 3397 Sequence operation(线段树:成段更新,查询连续目标子串长度)
HDU 3397 Sequence operation(线段树:成段更新,区间合并)分析:注意在总的query地方可以不用编写查询前缀和后缀的函数,特别注意优化二的地方. 1.本题有点类似于POJ3225:http://blog.csdn.net/u013480600/article/details/22284341也是同时有cover操作和异或操作,但是这里用异或标记原创 2014-03-28 22:29:58 · 1070 阅读 · 0 评论 -
HDU 3635 Dragon Balls(并查集:路径压缩)
HDU3635Dragon Balls这里有N个龙珠,每个龙珠初始时都在本身的城市(第i个龙珠在第i个城市),然后要你回答对应的询问。输入:首先是一个T(0T A B(1Q A。你需要输出X,Y,Z。X是A龙珠目前所在的城市,Y是X城市所有的龙珠,Z是A龙珠被转移的次数。输出:回答每条Q命令的X,Y,Z.分析:其实这就是一个并查集的应用,龙珠被转移的次数就是该龙珠距离根节点原创 2014-03-09 17:04:31 · 1460 阅读 · 0 评论 -
POJ 2828 Buy Tickets(线段树:查找并更新从左到右第i个1)
POJ 2828 Buy Tickets(线段树,逆推)分析: 本题的解法类似于POJ 2182:http://blog.csdn.net/u013480600/article/details/21574467 首先对于这种一个一个元素插入队列的例子,我们可以用链表来实现,插入时间为O(1),但是每次找到正确的插入位置pos,需要的时间是O(n),那么如何快原创 2014-03-25 19:38:14 · 1200 阅读 · 0 评论 -
POJ 1703 Find them, Catch them(路径压缩并查集)
POJ 1703 Find them, Catchthem(路径压缩并查集)一个城市由N个坏人,他们分别属于两个帮派.且这两个帮派里面最少都有1个人.现在给出如下两种语句:D a b 表示a和b肯定不在一个帮派A a b 你需要回答a和b的关系.输入:首先是一个T (1 输出:回答每条A语句.分析:带路径压缩的并查集:a与其父亲同帮派:v[a]=0a与其父亲不同帮派原创 2014-03-11 20:13:54 · 1224 阅读 · 0 评论