
ACM 图论
Tuesday..
这个作者很懒,什么都没留下…
展开
-
ZOJ 1298_Domino Effect
题意:多米诺骨牌效应:若干个关键牌相连,关键牌之间含有普通牌,关键牌倒下后其所在的行的普通牌全部倒下。求从推倒1号关键牌开始,最终倒下的牌的位置及时间。分析:最终倒下的牌的位置有两种情况,要么是正好为关键牌,要么是在两个关键牌之间的普通牌。前者时间可以利用最短路算法求出每个关键牌倒下的时间,而各行普通牌全部倒下的最终时间为该行两个关键牌倒下时间与该行从一端倒向另一端的时间和的一半,选出两种情况的最大原创 2015-12-26 17:06:22 · 422 阅读 · 0 评论 -
POJ 1094 Sorting It All Out【拓扑排序】
题目链接:http://poj.org/problem?id=1094题意:给定前n个字母的大小关系,问你是否根据前xxx个关系得到上升序列所有关系都无法确定唯一的一个序列第xxx个关系导致出现环分析:此题坑略多。。。。m大小没给!!这个很无语啊。。。数组开大点马上AC了。。。无法确定序列必须最后判断。一旦可以判断出上升序列,就不用管后面是否出现闭环了~~ where xxx is原创 2016-03-22 20:21:54 · 290 阅读 · 0 评论 -
POJ 2135_Farm Tour
题意:从出发点到目的地往返一次,道路ii连接着aia_i号和bib_i号,长度为cic_i。同一条路只能走一次,求最小路径长度。分析:如果没有往返,那么就是简单的最短路问题。如果规定严格从左到右,那么就是简单的双调旅行商问题。对于本题,同样还是将往返看成是从出发地开始的两条没有公共边的路径,便可以转化为求流量为2的最小费用流了~注意边为无向边代码:#include<cstdio>#include<原创 2016-02-27 19:12:49 · 331 阅读 · 0 评论 -
HDU 5644 King's Pliot【费用流】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5644题意:每天都有p[i]p[i]个飞行员进行阅兵,飞行员只工作一天。 mm个休假公式,花费tt[i]tt[i]元让飞行员在休假ss[i]ss[i]天后回来上班。 可以花费QQ元雇佣新的飞行员,但是直到P天后才能上班。分析:首先某一天雇佣的飞行员有三种可能: 1.原来就有的:从ss到第一天的结原创 2016-03-13 23:16:20 · 709 阅读 · 0 评论 -
最近公共祖先(Least Common Ancestors)
题意:给定一棵有根树T,给出若干个查询lca(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找一个节点,同时是u和v的祖先,并且深度尽可能大(尽可能远离树根)。通常有以下几种算法:在线算法,每次读入一个查询,处理这个查询,给出答案。离线算法,一次性读入所有查询,统一进行处理,给出所有答案。在线:倍增(基于二分搜索):基本思想就是让u和v同时走到同一高度,然后再一起原创 2016-03-24 22:33:28 · 520 阅读 · 0 评论 -
POJ 1330 Nearest Common Ancestors【LCA】
题目链接:http://poj.org/problem?id=1330题意:裸的LCA代码:倍增:#include<iostream>#include<cstring>using namespace std;const int maxn = 10005;const int maxm = 20;struct Edge{int to, next;};Edge edge[maxn * 2];原创 2016-03-24 22:49:04 · 411 阅读 · 0 评论 -
POJ 1470 Closest Common Ancestors【LCA Tarjan】
#题意:给定若干有向边,构成有根数,给定若干查询,求每个查询的结点的LCA。分析:还是很裸的tarjan的LCA。 这题我真的要吐槽!!调试了好久啊!!不是MLE就是RE。。。。查询数量没给,所以要用矩阵来存,这样还可以避免重复。给边的时候不知道会不会有重复的点,所以讲道理应该用vector保存。getchar。。。我不知道为什么会RE。。。其实ance数组可以不用的,只要每次处理子树的时原创 2016-03-24 23:09:10 · 374 阅读 · 0 评论 -
HDU 2586 How far away ?【LCA】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586题意:无向图,给定边及边权重,任意两点之间都有一条唯一的道路,道路上每个点只能出现一次。给定询问,求询问的结点之间的距离。分析:路上每个点只能出现一次~可以转化成有根树,问题也即为求最近公共祖先问题~~ 这里每条边加上了距离,求出lca后,用u、v的距离根的距离和减去2倍的根到最近公共祖先的距离即原创 2016-03-25 00:07:58 · 407 阅读 · 0 评论 -
Codeforces 628F Bear and Fair Set
题意:给定若干个上限uptoupto以及集合中在[1,upto][1,upto]中的元素个数,问是否存在这样的集合使得集合中的元素除以5的余数的个数相等。分析:首先可以想到区间的数与其除以5的余数和区间编号分别一一对应,这样我们就可以在他们之间建立容量为1的边,而由于规定某个区间的元素个数,所以我们在源点和对应区间编号之间建立容量为元素个数的边,这样就满足题目中的限制条件。而要求余数个数相等,即均为原创 2016-03-01 10:13:02 · 787 阅读 · 0 评论 -
HDU 5521 Meeting【最短路】
今天旁观了Angry_Newbie的模拟区域赛(2015shenyang) 倒着看最先看的M题,很明显的最短路问题,在我看懂的时候他们已经开始敲B了。 后来听说D过了很多人。。 D题一看是个博弈,给了很多组样例,找找规律懵一懵就ac了。然后我就滚粗了。。。 而他们也早就A了D,很快他们又A了B。。。 后来就全程看着罗大神敲无限TLE的M。感觉算法肯定没错,但是想不到哪里还可以优化。 后来原创 2016-04-09 00:07:08 · 594 阅读 · 0 评论 -
SOJ 4482 忽悠大神【最小生成树】
题目链接:http://acm.scu.edu.cn/soj/problem.action?id=4482题意:给定边权和点权,从一个点出发并回到该点,减少尽量多的边,每路过点和边都要把权重加到花费上,问最小花费是多少?分析:容易想到最后得到的肯定是棵树。 每条边肯定走两遍,然后我们在走边的时候它的两个点肯定也要走一遍,把每条边的权值更新为2倍的边权+点权。 出发点要走两遍,所以选择点权最少点作原创 2016-04-11 19:41:05 · 444 阅读 · 0 评论 -
Codeforces 667D World Tour【最短路+枚举】
题目链接:http://codeforces.com/contest/667/problem/D题意:在有向图中找到四个点,使得这些点之间的最短距离之和最大。分析:最简单的Bellman求最短路复杂度太高。可以对每个点进行一次bfs,获得所有连通的点之间的最短距离。 点数最多3000,枚举中间两个点i,ji,j,对于点i考虑反向边的最远距离,对于点j考虑正向边的最短距离。 由于题目说点不同,所以原创 2016-05-01 23:54:56 · 518 阅读 · 0 评论 -
SGU 101 Domino【欧拉路径】
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=101题意:N个多米诺骨牌,每个骨牌左右两侧分别有一个0~6的整数(骨牌可以旋转以调换其左右两数),求一种把这些骨牌从左到右排列的方案,使得所有相邻的两数字相等(即左边骨牌右侧的数字等于右边骨牌左侧的数字)。分析:把数字当成点,骨牌当做边。构成无向图,求一发欧拉道路即可。 无向图求欧拉路径还是原创 2016-04-21 22:03:42 · 617 阅读 · 0 评论 -
Codeforces 645D Robot Rapping Results Report【拓扑排序+二分】
Codeforces 645D Robot Rapping Results Report原创 2016-03-19 22:55:22 · 642 阅读 · 0 评论 -
Codeforces 653D Delivery Bears【二分+网络流】
题目链接:http://codeforces.com/problemset/problem/653/D题意:x个熊拿着相同重量的物品,从1号结点沿着路走到N号结点,结点之间有边相连,保证可以从1号走到N号。 The total weight that travels across a particular edge must not exceed the weight capacity of t原创 2016-03-21 18:04:47 · 580 阅读 · 0 评论 -
POJ 3268_Silver Cow Party
题意:n个地方,标号1~n,每个地方都有一头牛,现在要他们都去往标号为x的地方,再从x返回,每条道路都是单向的,求所有牛走的来回的最短路中的最大值。分析:注意在求每头牛走到x时,挨个算肯定超时,可以在将道路反向处理,都变成从x出。之前用vector模拟邻接表超时,后来用链表和数组分别模拟了邻接表,好像数组模拟的更快一些。代码:链表:#include<iostream>#include<cstdio原创 2016-02-07 23:12:47 · 337 阅读 · 0 评论 -
POJ 2240_Arbitrage
题意:给定一系列货币汇率,求能否从一种货币,经过一系列转换,最终转化回更高价值的该种货币。分析:即为求最长路并判断是否存在“正”权值回路,这里用的bellmanford算法。代码:#include<iostream>#include<cstring>#include<map>using namespace std;const int maxn = 50, maxm =1005;int n,原创 2016-02-08 01:10:29 · 297 阅读 · 0 评论 -
POJ 3255_Roadblocks
题意:无向图,求单源次短路,每条边可以走多次。分析:对于每个点记录最短路和次短路,在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令次短路等于原来的最短路,如果没有,就看能否直接更新次短路。代码:#include<iostream>#include<queue>#include<cstdio>using namespace std;#define se second#defin原创 2016-02-11 12:14:56 · 315 阅读 · 0 评论 -
POJ 3169_Layout
大早上水一发=。=题意:n头牛按编号顺序站成一列,给定那头牛之间的位置关系,求出第n头牛和第一头牛之间的最大距离。分析:差分约束系统,这题不等式关系还是挺好找的。代码:#include<cstdio>#include<iostream>using namespace std;struct edge{int u, v, w; };const int maxn = 1005, maxm = 25原创 2016-02-12 08:42:34 · 254 阅读 · 0 评论 -
ZOJ 2770_Burn the Linked Camp
题意:给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵?分析:差分约束系统,注意第i到第j至少有k个第i到第j最多有最大容量之和个每个兵营至少有0个每个兵营最多有最大容量个代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define me原创 2016-02-12 09:37:38 · 462 阅读 · 0 评论 -
POJ 3680_Intervals
题意:给定区间和该区间对应的权值,挑选一些区间,求使得每个数都不被K个区间覆盖的最大权值和。分析:如果K=1,即为区间图的最大权独立集问题。可以对区间所有端点排序后利用动态规划的方法,设dp[i]为只考虑区间右端点小于等于xix_i的区间所得到的最大总权重。dp[i] = max(dp[i - 1], max{dp[j] + w[k])|a[k] = x[j]且b[k] = x[i]}K>1,既然求原创 2016-03-06 10:14:38 · 378 阅读 · 0 评论 -
POJ 3686_The Windy's
题意:N个工件要在M个工厂加工,一个工件必须在一个工厂做完,工厂一次只能处理一个工件。给定每个工件在每个工厂加工所需时间,求出每个工件加工结束的最小时间平均值。分析:工厂一次只能处理一个工件,那么其他要在这个工厂处理的工件就要排队等待,如果有aa个工件要在该厂处理,花的时间分别为n1,n1+n2,...,n1+n2+n3..nan_1,n_1 + n_2,...,n_1+n_2+n_3..n_a,该原创 2016-03-04 21:20:56 · 374 阅读 · 0 评论 -
POJ 3281_Dining
题意:FJ准备了F种食物和D种饮料,每头牛都有喜欢的食物和饮料,并且每头牛都只能分配一种食物和饮料。问如何分配使得同时得到喜欢的食物和饮料的牛数量最多。分析:首先想到将牛与其对应的食物和饮料匹配起来,即在食物、饮料与牛之间连一条边,再在s和所有食物之间、t和所有饮料之间连一条边。这样每一条路径都对应着食物饮料和牛之间的匹配方案。那么如何避免一头牛被分配多组匹配呢?就将一头牛拆成两个结点,并用一条容量原创 2016-02-23 07:42:53 · 278 阅读 · 0 评论 -
POJ 3041_Asteroids
题意:N*N网格中有小行星,光束能将一整行或者一整列的行星消灭,问消灭所有行星至少需要多少光束?分析:最小顶点覆盖问题,将每个小行星看成边,左右顶点为横纵坐标,可以转化为二分图,利用二分图中最小顶点覆盖等于最大二分匹配的性质,求出最大二分匹配即可。代码:#include<cstdio>#include<vector>#include<cstring>using namespace std;c原创 2016-02-22 16:46:11 · 329 阅读 · 0 评论 -
POJ 3723 Conscription【最小生成树】
题意:征用一些男生和女生,每个应都要给10000元,但是如果某个男生和女生之间有关系,则给的钱数为10000减去相应的亲密度,征集一个士兵时一次关系只能使用一次。分析:kruskal求最小生成树,注意男生和女生用偏移量处理。代码:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;struct ed原创 2016-02-11 11:08:57 · 477 阅读 · 0 评论 -
Codeforces 659E New Reform【DFS】
题目链接:http://codeforces.com/problemset/problem/659/E题意:给定n个点和m条双向边,将双向边改为单向边,问无法到达的顶点最少有多少个?分析:无法到达的话即入度为0。 DFS判断每一个连通块中是否存在环,如果存在环,就能保证环中每个点的入度都大于等于1。否则,有头有尾,头的入度为0。代码:#include<cstdio>#include<queue>原创 2016-03-31 20:02:34 · 1028 阅读 · 2 评论 -
POJ 3469_Dual Core CPU
题意:N个模块可以在A,B两个核上运行,分析:用最小的费用将两个对象分成两个集合的问题,常常可以转换为最小割问题。 按照N个模块在哪个核上运行分成两个集合。并建边使最小费用等于最小割的容量,即转化为求图中最大流。代码:#include<cstdio>#include<vector>#include<cstring>#include<queue>using namespace std;st原创 2016-02-23 23:19:01 · 311 阅读 · 0 评论 -
SGU 103 Traffic Lights【最短路】
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=16530题意:给定每个点最初的颜色,最初颜色持续时间,以及每个颜色的持续时间。每个点的颜色蓝紫交替,只有等待到一条路的两个端点颜色相同才能通行。到达某点时颜色恰好变色,则按照变色之后的颜色考虑。 给定道路的花费,问最少需要多少时间。分析:最短路问题。 dijk原创 2016-04-24 10:58:06 · 520 阅读 · 0 评论