- 博客(86)
- 收藏
- 关注
转载 hdu 3172 Virtual Friends(并查集,字典树)
题意:人与人交友构成关系网,两个人交友,相当于两个朋友圈的合并,问每个出两人,他们目前所在的关系网中的人数。分析:用并查集,其实就是求每个集合当前的人数。对于人名的处理用到了字典树。注意:1、题目给出的n是指n对关系,上限有2*n个人。 2、题目很没有意思的既说了有多组数据,又要求输入组数。实际上还是多组数据。 1 #include<cstdio>...
2019-10-01 10:53:35
208
转载 hdu Portal(离线,并查集)
题意:在一张无向图上,已知边权,做q组询问,问小于L的点对共有几组。点对间的距离取=min(两点之间每一条通路上的最大值)。分析:这里取最大值的最小值,常用到二分。而这里利用离线算法,先对边从小到大排序,逐一加入集合中。利用并查集,当两点之间不在同一个集合,那么所加入的边就是两个集合中任一点对的距离(两集合各取一点)。所以有cnt2+=num[fu]*num[fv];注意:有些询...
2019-10-01 10:53:34
247
转载 hdu 3367 Pseudoforest(并查集)
题意:有一种叫作Pseudoforest的结构,表示在无向图上,每一个块中选取至多包含一个环的边的集合,又称“伪森林”。问这个集合中的所有边权之和最大是多少?分析:如果没有环,那么构造的就是最大生成森林,在此基础上,只要取每个块中剩余边的最大边,必然得到结果。不过要构造出每条边归属于哪个块。 看了别人的代码,发现原来可以直接构造出一个标记数组记录环,在做并查集的时候扩充if...
2019-10-01 10:53:33
200
转载 hdu 1811 Rank of Tetris(拓扑,并查集)
题意:略分析:排序先按rating,若相同,则按rp。考虑到每个人的rp均不同,所以rating相同的人必然可以排序。那么只需要考虑rating不同的集合了。 大小关系可以用有向边表示,而大小关系的传递可以用拓扑排序来呈现。 接着就要分析,三种结果对应的情况了。 很明显,ok要求拓扑出来的必须是一条链,一旦有分支,分支处的两个(或多个)点的大小关系就不明...
2019-10-01 10:53:32
142
转载 hdu 1598 find the most comfortable road(并查集)
题意:略分析:多询问问题,利用并查集加速。类似于kruskal对MST的构建:枚举最小的边,逐渐将更大的边加入集合,当查询的点在同一个集合,那么当前最小值,就是所加的最后一条边与第一条只差。注意:当枚举的最小边,把所有大边加入都不能使查询点(a,b)加入同一集合,那么终止枚举。 1 #include<cstdio> 2 #include<cstr...
2019-10-01 10:53:32
169
转载 poj 2762 Going from u to v or from v to u?(强连通、缩点、拓扑)
题意:(理解错了)在一个洞穴中有多个room,要求任意选两个room:u、v,都能保证u、v之间有通路,注意洞穴中的路是有向边。、分析:强连通子图中的点必然两两之间可以互通,两个强连通子图之间有通路,必须在树上构成父子关系(不一定相邻),又两两之间有通路,即任意两个点u、v都存在父子关系——所有强连通子图构成一条链。错误:tarjin初始化忘记更新scc_cnt=dfs_cloc...
2019-10-01 10:53:30
132
转载 uva 11020 Efficient Solutions(multiset)
题意:给出n个人的属性(a,b),当A(a,b)与B(a',b')存在关系:(a<a'&&b<=b')||(a<=a'&&b<b')就说A比B占优势,否则,两人都存在优势。问:每输入一个人的信息,计算当前占优势的人的个数。分析:容易想到以坐标形式在一个平面图上表示每个人的信息,那么以上的条件关系式就转变为,当一个点的左下方(可以...
2019-10-01 10:53:30
166
转载 hdu 4454 Stealing a Cake(计算几何:最短距离、枚举/三分)
题意:已知起点、圆、矩形,要求计算从起点开始,经过圆(和圆上任一点接触即可),到达矩形的路径的最短距离。(可以穿过园)。分析:没什么好的方法,凭感觉圆上的每个点对应最短距离,应该是一个凸函数,用三分来解。不过应该是分成两部分,用两次三分来解。具体原因不明,通过实验只能得出三分必须是针对一个凸函数,很明显,从0~2*pi不是一个凸函数,但同理,0~pi,pi~2*pi也不一定是个凸函数...
2019-10-01 10:53:28
199
转载 hdu 4112 Break the Chocolate(乱搞题)
题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的;2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开。问两种方式各需多少次操作才能完成任务。分析:用手掰很明显是(n*m*k-1)次操作。用刀切注意不是((n-1)+(m-1)+(k-1))次操作,这只是不动原巧克力的操作数。举个例子:1*1*4的巧克力...
2019-10-01 10:53:28
230
转载 poj 2553 The Bottom of a Graph(强连通、缩点、出入度)
题意:给出一个有向图G,寻找所有的sink点。“sink”的定义为:{v∈V|∀w∈V:(v→w)⇒(w→v)},对于一个点v,所有能到达的所有节点w,都能够回到v,这样的点v称为sink。分析:由(v→w),(w→v)可知,节点v,w构成强连通,很自然的想到要缩点。缩点之后,DAG上的每一条边,都是单向的(v->w),无回路(w->v)。错误:对于v可达的点w,不仅...
2019-10-01 10:53:27
135
转载 poj 1236 Network of Schools(强连通、缩点、出入度)
题意:给出一个有向图。1:问至少选出多少个点,才能沿有向边遍历所有节点。2:问至少加多少条有向边,使原图强连通。分析:第一个问题,缩点后找所有树根(入度为0)。第二个问题,分别找出入度为0和出度为0的所有点,去最大值即为答案。 关于第二个问题,与这道题很相似。 1 #include<cstdio> 2 #include<cstring>...
2019-10-01 10:53:26
136
转载 hdu 1885 Key Task(bfs+位运算)
题意:矩阵中'#'表示墙,'.'表示通路,要求从起点'*'到达终点'X',途中可能遇到一些门(大写字母),要想经过,必须有对应的钥匙(小写字母)。问能否完成,若能,花费的时间是多少。分析:同hdu 1429,只不过这里用map把四种钥匙标号了,否则爆内存。错误:判断门的条件用 isupper(ch) 表示,所以终点'X'也在这个范围内。 1 #include<...
2019-10-01 10:53:25
155
转载 poj 1659 Frogs' Neighborhood(出入度、可图定理)
题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况。分析:这是一道定理题,只要知道可图定理,就是so easy了 可图定理:对每个节点的度从大到小排序,取第一个(最大)的度的节点,依次与其后(度)的节点连边,每连一条边,对应的度减1。然后重新排序,重复以上步骤,若度出现负值,则不可图。(若n个点中,某点的度>=n...
2019-10-01 10:53:25
188
转载 UVALive 3415 Guardian of Decency(二分图的最大独立集)
题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求。在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧。现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学生数量。分析: 1、这里的问题可以抽象成求最大独立集:若两人发生暧昧,则在两人中建边,当四个条件中任意一个成立,则将两个人孤立。老师选择的学生必然是两两之间不会发生暧昧的。 ...
2019-10-01 10:53:23
168
转载 poj 1465 Multiple(bfs+余数判重)
题意:给出m个数字,要求组合成能够被n整除的最小十进制数。分析:用到了余数判重,在这里我详细的解释了。其它就没有什么了。 1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 #include<queue> 5 #include<algor...
2019-10-01 10:53:23
213
转载 UVALive 3989 Ladies' Choice(稳定婚姻问题:稳定匹配、合作博弈)
题意:男女各n人,进行婚配,对于每个人来说,所有异性都存在优先次序,即最喜欢某人,其次喜欢某人...输出一个稳定婚配方案。所谓稳定,就是指未结婚的一对异性,彼此喜欢对方的程度都胜过自己的另一半,那么这对异性就有私奔的可能性。这里明显也是一个匹配问题,与最佳二分完美匹配所不同的是,二分匹配重在求最佳权值,而这里求的是满足彼此的要求。这里用到了Gale-Shapley算法。算法学习:...
2019-10-01 10:53:21
440
转载 hdu 1226 超级密码(bfs+余数判重)
题意:略过分析:用m个数字组成一个能够被n整除的c进制数的最小值,实际上本题的关键就在于这个最小值上。 首先确定我们的思路是从小到大寻找。先查看一位数,即查看着m个数字是否能被n整除;若不能,就查看任意可能的两位数组合...可是如此一来,预算量太大。于是我们考虑是否存在冗余量。 已知A,B两个数(A<B),A%n==x,B%n==x,我们称其为同余,那么以它...
2019-10-01 10:53:21
283
转载 hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
又开始刷题了题意:略过。分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙。状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,key|(x,y)表示捡起了一把钥匙。错误:1、开标记数组mark[][][],key状态大小顺手开成key,其实应该是1<<key 2、判断应该先判wa...
2019-10-01 10:53:20
206
转载 UVALive 2238 Fixed Partition Memory Management(二分完美匹配)
题意:计算机中有一些固定大小的内存,内存越大,处理速度越快。对于一个程序,加入不同的内存空间,处理所需时间不同。现给出m个内存空间,n个程序,对于每个程序程序,有k组数据(s,t),分别表示当程序 i 在某个内存环境s下对应的运行时间t。当有一个内存空间为si,一个程序的2组数据a,b,满足as<=si<bs,那么这个程序放到该内存中的运行时间是at(取下界)。已知不同的内存...
2019-10-01 10:53:19
243
转载 UVA 11419 SAM I AM(最大二分匹配&最小点覆盖:König定理)
题意:在方格图上打小怪,每次可以清除一整行或一整列的小怪,问最少的步数是多少,又应该在哪些位置操作(对输出顺序没有要求)。分析:最小覆盖问题 这是一种在方格图上建立的模型:令S集表示“行”,T集表示“列”,那么小怪站的位置w(i,j),就是二分图上的边。如此建图,那么每次清除,就是把与某个点相连的边全部清除,问最少选择多少个点。(这也是最小点覆盖的概念:选择尽量少的点,使得每条...
2019-10-01 10:53:18
251
转载 codeforces 340B Maximal Area Quadrilateral(叉积)
事实再一次证明:本小菜在计算几何上就是个渣= =题意:平面上n个点(n<=300),问任意四个点组成的四边形(保证四条边不相交)的最大面积是多少。分析:1、第一思路是枚举四个点,以O(n4)的算法妥妥超时。2、以下思路源自官方题解 以O(n2)枚举每一条边,以这条边作为四边形的对角线(注意:这里所说的对角线是指把四边形分成两部分的线,不考虑凹四边形可能出现的两...
2019-10-01 10:53:17
136
转载 codeforces 340A The Wall(简单数学题)
题意:输入a,b,x,y,a,b分别是两人的步数(每a块砖,刷一次),则有一些砖被两人同时刷到了,问[x,y]区间内有多少块砖同时被两人刷到。分析:就是求[x,y]中有多少个能把a,b的最小公倍数lcm=a*b/gcd(a,b)整除的数字。求出[x,y]区间上出现的第一个和最后一个满足条件的数字 l,r ,那么答案就是(r-l)/lcm+1。 1 #include&l...
2019-10-01 10:53:16
245
转载 UVA 11383 Golden Tiger Claw(最佳二分图完美匹配)
题意:在一个N*N的方格中,各有一个整数w(i,j),现在要求给每行构造row(i),给每列构造col(j),使得任意w(i,j)<=row(i)+col(j),输出row(i)与col(j)之和最小的方案。当看到w(i,j)<=row(i)+col(j),并且row()col()都是自己构造的时候,就想到了二分匹配:w[i,j]<=Lx[i]+Ly[j]。直接套用...
2019-10-01 10:53:16
176
转载 UVA 11865 Stream My Contest(最小树形图)
题意:N台机器,M条有向边,总资金C,现要到搭建一个以0号机(服务器)为跟的网路,已知每条网线可以把数据从u传递到v,其带宽为d,花费为c,且d越大,传输速度越快,问能够搭建的传输速度最快的网络d值是多少?(即:在C的支持下,网络中d的最小值最大是多少?)一开始把问题想简单了,以为网线可以随便接,其实是确定了u->v的= =最小树形图,概念蛮好理解的,要学习的话理论:h...
2019-10-01 10:53:14
135
转载 UVALive 4128 Steam Roller(最短路(拆点,多状态))
题意:模拟了汽车的行驶过程,边上的权值为全速通过所消耗的时间,而起步(从起点出发的边)、刹车(到终点结束的边)、减速(即将拐弯的边)、加速(刚完成拐弯的边)这四种不能达到全速的情况,消耗的时间为权值*2。问从起点到终点所消耗的最少时间。这道题主要是建图,很复杂,无耻地照着书上的代码码了一遍。让状态搞糊涂了= =注意:1、grid[][][4]记录了点的上下左右四条边的权值,i...
2019-10-01 10:53:12
216
转载 codeforces 340C Tourist Problem(简单数学题)
题意:固定起点是0,给出一个序列表示n个点,所有点都在一条直线上,其中每个元素代表了从起点到这个点所走的距离。已知路过某个点不算到达这个点,则从起点出发,到达所有点的方案有许多种。求所有方案走的总路程/方案数,输出分子、分母,要求不含约数。e.g:n=3 {2,3,5},{2,3,5}{2,5,3}{3,2,5}{3,5,2}{5,2,3}{5,3,2},总路程(5+7+7+8+9+...
2019-10-01 10:53:12
326
转载 UVALive 4043 Ants(二分图完美匹配)
题意:每个蚁群有自己的食物源(苹果树),已知蚂蚁靠气味辨别行进方向,所以蚁群之间的行动轨迹不能重叠。现在给出坐标系中n个蚁群和n棵果树的坐标,两两配对,实现以上要求。输出的第 i 行表示第 i 个蚁群应该去哪棵果树。(已知2*n个点互不重合)容易想到二分完美匹配,但究竟以什么为权值?需要利用一个关系:两条线段如果相交,那么线段长度之和必然大于其四个点不相交的连法对应的线段长度之和。(...
2019-10-01 10:53:11
232
转载 poj 1201 Intervals(差分约束)
做的第一道差分约束的题目,思考了一天,终于把差分约束弄懂了O(∩_∩)O哈哈~题意(略坑):三元组{ai,bi,ci},表示区间[ai,bi]上至少要有ci个数字相同,其实就是说,在区间[0,50000]上,每一个三元组表示[ai,bi]之间至少要标记ci个数字,问至少要标记多少个数字。在学习差分约束的童鞋,建议看一下:09年姜碧野的《SPFA算法的优化及应用》,06年冯威的《浅...
2019-10-01 10:53:10
202
转载 UVA 11354 Bond(最小瓶颈路+倍增)
题意:问图上任意两点(u,v)之间的路径上,所经过的最大边权最小为多少?求最小瓶颈路,既是求最小生成树。因为要处理多组询问,所以需要用倍增加速。先处理出最小生成树,prim的时间复杂度为O(n*n),kruskal为O(mlogm)。前者适合处理稠密图,后者适合处理稀疏图。这里的倍增处理是值得记住的,在树上做多组询问;亦或是,将无向图缩点在询问,都是可以这样加速的。注意:...
2019-10-01 10:53:09
174
转载 hdu 4691 Front compression
暴力水过,剪一下枝= =果断是数据水了 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define LL __int64 5 using namespace std; 6 7 const int MAXN=111111; 8 ch...
2019-10-01 10:53:08
149
转载 poj 1364 King(差分约束)
题意(真坑):傻国王只会求和,以及比较大小。阴谋家们想推翻他,于是想坑他,上交了一串长度为n的序列a[1],a[2]...a[n],国王作出m条形如(a[si]+a[si+1]+...+a[si+ni])>k(或<k)的批示,结果发现批错了,问是否存在一个满足不等式组的序列a[1]...a[n],好让国王借口自己看错了。因为是求是否存在,即判环,没有要求最大还是最小,所以...
2019-10-01 10:53:07
160
转载 UVA 11478 Halum(用bellman-ford解差分约束)
对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d。现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小边权的最大值。不得不说,图论与动态规划的产物实在是神奇!!1、既然是“最小值最大”问题,容易想到二分答案。2、抽象出数学模型。这个在《训练指南》里写得已经很详细,鄙人还是以自己的...
2019-10-01 10:53:06
228
转载 UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)
前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了。03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑。题意:运送x个货物从a->b,沿途要上交过路费,village(小写字母)只需交一个单位的货物,town(大写字母)要交(x/20+((x%20==0)?0:1))个单位的货物,即每20个货物要上交一个,不足...
2019-10-01 10:53:05
223
转载 《SPFA算法的优化及应用》——姜碧野(学习笔记)
一、核心性质:三角不等式。最短路满足d[v]<=d[u]+w(u,v)二、SPFA两种实现: 常见的是基于bfs的,这是直接对bellman-ford用队列维护。根据最短路的长度最长为(n-1),以点入队n次判负环。适用于拓扑关系较强的环境。 基于dfs的实现与前者本质相同。但实现了迭代的连续性,从而可以以搜到栈内的点来判正负环。但因迭代而导致耗时较多,易超时。...
2019-10-01 10:53:05
665
转载 poj 1986 Distance Queries(LCA:倍增/离线)
计算树上的路径长度。input要去查poj 1984。任意建一棵树,利用树形结构,将问题转化为u,v,lca(u,v)三个点到根的距离。输出d[u]+d[v]-2*d[lca(u,v)]。倍增求解: 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> ...
2019-10-01 10:53:03
237
转载 hdu 4690 EBCDIC
还有什么好说的呢?打表题= = 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<map> 5 using namespace std; 6 7 #define MP make_pair 8 9 ma...
2019-10-01 10:53:03
122
转载 UVA 11090 Going in Cycle!!(二分答案+判负环)
在加权有向图中求平均权值最小的回路。一上手没有思路,看到“回路”,第一想法就是找连通分量,可又是加权图,没什么好思路,那就转换题意:由求回路权值->判负环,求最小值->常用二分答案。二份答案,再利用利用bellman-ford判负环。注意:1、double:经常为了确定每个变量的类型,漏掉了某个变量,调半天心都凉了。干脆全变double。2、没有告诉m的数...
2019-10-01 10:53:02
209
转载 hdu 4671 Backup Plan(签到题)
错成那样,还以为是卡时间卡精度的变态题,结果就那么ac了= = 悔死我了题意就不概述了,只要处理前两列即可。其中第一列顺序直接扫一遍,第二列要先处理较少的那几种。我是接着第一列用 head[] 继续处理,朋友给出了直接逆向处理的算法,更快、代码也会好写一点。 1 #include<cstdio> 2 #include<cstring> 3 ...
2019-10-01 10:53:01
137
转载 hdu 4674 Trip Advisor(缩点+倍增lca)
花了一天半的时间,才把这道题ac= =确实是道好题,好久没敲这么长的code了,尤其是最后的判定,各种销魂啊~题目中给出的条件最值得关注的就是:每个点最多只能在一个环内->原图是由一个个边连通分量以树形连接组成的->做无向图缩点后,得到的是一个树形结构。题目要求:u->v,必须经过p,且不能重复经过同一个点,即在树上从u到v做一笔画。开始先想到汉密尔顿迹...
2019-10-01 10:53:00
389
转载 poj 1330 Nearest Common Ancestors(LCA:最近公共祖先)
多校第七场考了一道lca,那么就挑一道水题学习一下吧= =最简单暴力的方法:建好树后,输入询问的点u,v,先把u全部的祖先标记掉,然后沿着v->rt(根)的顺序检查,第一个被u标记的点即为u,v的公共祖先。标记的时候又犯老毛病了:while,do while都不对,最后还是while(1)了T^T 1 #include<cstdio> 2 #in...
2019-10-01 10:52:58
151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅