自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

懒人一枚。

好好努力吧,少年。

  • 博客(343)
  • 收藏
  • 关注

原创 LeetCode_个人题解

github地址

2015-03-09 20:07:56 858 1

原创 HDU3622-Bomb Game(2-SAT+二分)

题目链接题意:给n对炸弹可以放置的位置(每个位置为一个二维平面上的点),每次放置炸弹是时只能选择这一对中的其中一个点,每个炸弹爆炸的范围半径都一样,控制爆炸的半径使得所有的爆炸范围都不相交(可以相切),求解这个最大半径。思路:二分答案,其中建图,用2-SAT判断方案是否可行。代码:#include #include #include #include

2014-11-10 20:58:39 956

原创 HDU1824-Let's go home(2-SAT)

题目链接

2014-11-10 19:46:08 798

原创 POJ2594-Treasure Exploration(最小路径覆盖变形)

题目链接题意:在一个有向图上,至少放多少个机器人可以遍历整个图(每个顶点可以重复遍历)?思路:最小路径覆盖的变形,因为点可以重复遍历,所以要用floyd重新建图,然后用最小路径覆盖去做。代码:#include #include #include #include #include using namespace std;const int M

2014-11-08 18:10:57 869

原创 POJ1422-Air Raid(最小路径覆盖)

题目链接题意:给定一个有向图,问最少放多少个伞兵,使得所有路口都能被走到,所有路口有且只被走到一次。思路:二分图的最小路径覆盖。 在一个 N*N 的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中

2014-11-08 15:44:01 1305

原创 POJ1719- Shooting Contest(二分图最大匹配)

题目链接题意:给定一个矩阵,每列有两个白点,其他都是黑点,现在要求每列选一个白点,使得每一行至少包含一个白点被选中思路:利用白点所在的位置行列建图,最大匹配数如果不等于行数的话,就无解。代码:#include #include #include #include #include using namespace std;const int M

2014-11-03 20:49:49 943

原创 POJ1466-Girls and Boys(最大独立集)

题目链接题意:n个人,每个人有一个爱慕的集合,现在要挑出一些人,使得集合中没有人两两爱慕,问这个集合最大人数是多少思路:每个人拆成两点,爱慕和被爱慕,建图,求出二分图最大匹配,因为是两两匹配,然后人数n - 最大匹配数 / 2就是最大独立集代码:#include #include #include #include #include using

2014-11-03 16:09:50 975

原创 HDU3062-Party(2-SAT)

题目链接思路:2-SAT的模版题代码:#include #include #include #include #include using namespace std;const int MAXN = 10005;struct TwoSAT{ int n; vector g[MAXN * 2]; bool mark[MAX

2014-11-03 10:40:44 953

原创 POJ3694-Network(Tarjan缩点+LCA)

题目链接题意:给你一个连通图,然后再给你n个询问,每个询问给一个点u,v表示加上u,v之后又多少个桥。思路:用Tarjan缩点后,形成一棵树,所以树边都是桥了。然后加入边以后,查询LCA,LCA上的桥都减掉。代码:#include #include #include #include #include #include using namesp

2014-10-22 11:55:06 972

原创 HDU3861-The King’s Problem(有向图强连通缩点+最小路径覆盖)

题目链接题意:题目大意:一个有向图,让你按规则划分区域,要求划分的区域数最少。 规则如下: 1、有边u到v以及有边v到u,则u,v必须划分到同一个区域内。 2、一个区域内的两点至少要有一方能到达另一方。 3、一个点只能划分到一个区域内。思路:根据规则1可知必然要对强连通分量进行缩点,缩点后变成了一个弱连通图。根据规则2、3可知即是要求图的最小路径覆盖。

2014-10-21 19:33:41 1022

原创 POJ2762-Going from u to v or from v to u?(强连通缩点+DP)

题目链接题意:给出一张有向图,判断图上的任意两个点是否存在一条路可达(单向可达即可)。思路:有向图找出强连通分量,然后缩点,因为题目要求任意两点存在可达的路,所以缩点之后的点,要形成一条单链,才能符合可达的要求,在这里用DP求最长路来判断是否能形成一条单链。代码:#include #include #include #include #include

2014-10-18 10:31:46 1001

原创 POJ2553-The Bottom of a Graph

题目链接题意:求解Bottom(G),即集合内的点可以互相到达。思路:有向图的强连通,缩点,找出出度为0的点,注意符合的点要按升序输出。代码:#include #include #include #include using namespace std;const int MAXN = 5010;const int MAXM = 50010;

2014-10-18 10:01:14 1064

原创 UVA11770 - Lighting Away

题目链接题意:一个有向图,每对一个结点操作,就可以触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少需要操作多少个结点使得所有结点获得标记思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。跟UVA11504一样的题目。UVA11504代码:#include #include #include #

2014-10-17 16:03:23 931

原创 UVA11504- Dominos(Tarjan+缩点)

题目链接题意:多米诺骨牌的游戏,给出一些牌,以及哪张牌倒了之后会推倒哪张牌,求最少的推倒牌的张数,使得所有牌都倒下去。思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。代码:#include #include #include #include using namespace std;const int MAXN

2014-10-16 23:37:52 1629

原创 UVA11709- Trust groups

题目链接题意: 公司里面的人际关系,A相信B,B相信C,即A相信C,每个人都相信自己,求出存在几个小组,小组内的成员互相相信。思路:求有向图中,强连通分量的个数。思路:#include #include #include #include #include using namespace std;const int MAXN = 1010;

2014-10-16 20:08:00 952

原创 UVA11838- Come and Go

题目链接题意: 判断城市是否全部能相通思路:判断一张有向图是否强连通代码:#include #include #include #include using namespace std;const int MAXN = 2005;const int MAXM = MAXN * MAXN;struct Edge{ int to, n

2014-10-16 19:20:13 939

原创 UVA247- Calling Circles(有向图的强连通分量)

题目链接题意: 给定一张有向图,找出所有强连通分量,并输出。思路:有向图的强连通分量用Tarjan算法,然后用map映射,便于输出,注意输出格式。代码:#include #include #include #include #include using namespace std;const int MAXN = 2000;const in

2014-10-16 18:48:32 1579

原创 UVA10972 - RevolC FaeLoN(双连通分量)

题目链接题意: 给定一个无向图,问最少添加多少条边,使得这个图成为连通图思路:首先注意题目给出的无向图可能是非连通的,即存在孤立点。处理孤立点之后,其他就可以当作连通块来处理,其实跟POJ3352很像,只不过存在孤立点而已。所以找出桥,缩点,然后统计度数为0(伸出两条边)的点u和度数为1(伸出一条边)的点。最后的答案为(2 * u + v + 1) / 2。PO

2014-10-15 23:07:10 1089

原创 POJ2117-Electricity

题目链接题意: 求出删除一个点之后,连通块最多有多少思路:数组记录每个点删除后的连通块有多少个,注意图不一定是连通的。代码:#include #include #include #include #include #include using namespace std;const int MAXN = 10005;struct Edg

2014-10-13 17:03:46 1320

原创 UVA10199- Tourist Guide(割点)

题目链接题意: 给出一张无向图,找出割点,字典序输出割点的名字。思路:简单的割点的求解,用map映射,容易输出。代码:#include #include #include #include #include #include #include #include using namespace std;const int MAXN = 1

2014-10-13 16:29:54 924

原创 UVA610 - Street Directions(Tarjan)

题目链接题意: 给出一张无向图,尽量多的使边成为单向边,改变之后的图仍然强连通。思路:找出所有的桥,桥肯定是不能改变成为单向边,之后不是桥的边能组成n个连通块,按照dfs的顺序规定方向即可。代码:#include #include #include #include #include #include using namespace std;

2014-10-13 15:37:59 920

原创 UVA315- Network(无向图割点)

题目链接题意: 给出一张无向图,求割点的个数思路:很裸的题目,直接套用模版即可。代码:#include #include #include #include using namespace std;const int MAXN = 1005;struct Edge{ int to, next; bool cut;}edge

2014-10-13 10:38:56 2422

原创 UVA796- Critical Links(无向图的桥)

题目链接题意: 给出一个无向图,按顺序输出桥思路:求出所有的桥,然后按顺序输出即可代码:#include #include #include #include #include #include using namespace std;const int MAXN = 10005;struct Edge{ int to, nex

2014-10-13 10:03:37 1546

原创 UVA11080- Place the Guards(二分图染色)

题目链接题意:放最少的士兵去监视所有的道路, 但士兵不可相邻,符合的话,就输出最少的士兵数,否则输出-1思路:其实就是二分图染色,即黑白染色,然后选择黑白染色最少的那个颜色累加,但要注意可能有多个连通块,只要有一个连通块不符合的话,就不符合。代码:#include #include #include #include #include using

2014-10-11 20:07:18 911

原创 UVA11294-Wedding(2-SAT)

题目链接题意:有n对夫妻参加一个婚宴。所有人都坐在一个长长的餐桌的左边或者右边,所有夫妻都只能面对面坐,包括新娘和新郎。新娘只能看到坐在她不同侧的人。有m对人超过架,新娘不希望看到他们坐在同一侧。问有没有分配方案满足新娘的要求。思路:2-SAT问题。假设每对夫妇为一个变量xi。假设xi为true时,妻子与新娘坐同一侧;xi为false时,丈夫与新娘坐同一侧。当xi和xj

2014-10-05 15:09:18 960

原创 UVALive3713-Astronauts(2-SAT)

题目链接题意:有A、B、C3个任务分配给n个宇航员,其中每个宇航员恰好分配一个任务。假设n个宇航员的平均年龄为x,只有年龄大于x的才能领取A任务;只有年龄严格小于x的才能领取B任务,而任务C没有限制。有m对宇航员相互讨厌,因此不能分配同一任务。求出是否能找出符合的任务方案。思路:用xi表示第i个宇航员的分配方案。年龄大于等于x的可以选择A(xi = true)和C(xi

2014-10-04 21:13:49 1082

原创 POJ3352-Road Construction(边连通分量)

题目链接题意:问要添加几条边才能使所给无向图图变成边双连通图。思路:一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1。统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添

2014-10-03 21:15:44 1899 1

转载 图的割点、桥与双连通分支

[点连通度与边连通度]在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。[双连通图、割点与桥]

2014-10-03 20:02:06 676

原创 POJ1236-Network of Schools(Tarjan + 缩点)

题目链接题意:给定一张有向图,问最少选择几个点能遍历全图,以及最少添加几条边使得有向图成为一个强连通图。思路:对于有向图而言,首先求出有几个强连通分量,之后将每个强连通分量缩点,形成DAG,本题开头第一句就说图是连通的了。之后想要遍历整张图的话,只要找出入度为0的点有几个,而添加边的数量就取决于所有点的出入度大小。代码:#include #include

2014-10-03 15:36:51 874

原创 UVA10765-Doves and bombs(BCC)

题目链接题意:给定一个n个点的连通的无向图,一个点的“鸽子值”定义为将它从图中删去后连通块的个数。求“鸽子值”按降序排列的前m个。思路:其实题目就是要用来寻找割顶,我们只需找出割顶,然后记录这个割顶属于几个不同连通分量的公共点,不是割点的,去掉之后,图的连通块数为1。代码:#include #include #include #include #

2014-10-03 13:55:42 1130

原创 UVA11396-Claw Decomposition(二分图判定)

题目链接题意:是否能将一张无向连通图分解成多个爪型。每一条边只能属于一个爪型,每个点的度数为3.思路:当图分解成类干个爪型时,每条边只属于一个爪子,所以每条边的两个点一定要处于2个不同的鸡爪中代码:#include #include #include #include #include using namespace std;const in

2014-09-29 15:56:04 866

原创 UVALive3211- Now or later(二分+2-SAT)

题目链接题意:有n架飞机。每架飞机都可以选择早着陆和晚着陆两种方式之一,且必须选择一种。任务就是安排所有飞机着陆时,相邻两个着陆时间间隔的最小值尽量大。思路:用二分处理最小值尽量大。该题目可以转化为是否存在一个调度方案,使得相邻两个着陆时间差总是不小于P,进一步转化为任意两个着陆时间差总是不小于P。,假设布尔变量xi表示第i架飞机是否早着陆,唯一限制就是“时间差小于P的

2014-09-28 15:47:22 1140

原创 UVA11324-- The Largest Clique(SCC+DP)

题目链接题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要么u可以到到v,要么v可以到达u(u和v可以互相到达)思路:我们可以缩点,用Tarjan求出所有强连通分量,让每个SCC的权值等于它的结点个数。由于SCC图是有一个DAG,使用DP求解。代码:#include #include #include #inclu

2014-09-28 11:03:01 1231

原创 UVALive4287-- Proving Equivalences(SCC+Tarjan)

题目链接题意:证明n个命题全部等价,已经给出m此推导,求至少还要几次推导才能完成整个证明。思路:可以将命题看作结点,推导看作有向边,则本题就能转化为n个结点m条边的有向图。利用tarjan算法得到所有强连通分量,将这些强连通分量当作一个点,得到一个DAG。之后就可以求次数了。注意当强连通数量为1时,就代表着证明已经完成了。代码:#include #incl

2014-09-28 09:46:36 891

原创 HDU5045-Contest(DP+状态压缩)

题目链接题意:有n个人做m道题目,每个人对于每题都有答对的概率,求最后答出所有题目概率的最大值。有要求就是每两个人之间答题的数目不能超过1。思路:DP+状态压缩。dp[i][j]表示前i道题目j个人答题状态的最大值,j用二进制表示,因为人最多就10个。因为每两个人之间答题数目不能超过1,所以当状态达到1 代码:#include #include #inc

2014-09-28 08:35:47 1150 2

原创 UVALive5135 - Mining Your Own Business(BCC)

题目链接题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点。任意两个连接点之间最多只有一条隧道。任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱,求最少安装数量和方案。思路:其实本题就相当于在一张无向图中,涂尽量少的黑点,使得任意删除哪个点,每个连通分量至少有一个黑点。因为不同的连通分量最多只有一个公共点

2014-09-26 19:35:39 911

原创 UVALive3523-Knights of the Round Table(BCC+二分图判定)

题目链接题意:有n个骑士经常举行圆桌会议,每次至少3人参加,且相互厌恶的其实不能坐在圆桌相邻的位置。如果发生意见分歧,则要举手表决,因此参加的骑士数目一定要为奇数。统计有多少人不能参加任何一个会议。思路:这是大白上面的一道例题。我们可以先根据骑士之间的关系建立无向图G,则题目就转化为求不再任何一个简单奇圈上的结点个数。如果图G不连通,就分别对G的连通分量求解。简单圈上的

2014-09-26 17:06:49 935

原创 UVALive4255-Guess(拓扑排序)

题目链接题意:对于一个序列a1,a2...an,我们可以计算出一个符号矩阵S,其中Sij为ai+..+aj的正负号。给出符号矩阵,要求输出一个对应的序列。思路:使用连续和转化为前缀和之差的技巧,将前缀和当做一个顶点,那样就能确立边的关系,以及入度数,之后用拓扑排序求解,先着一个入度为0的顶点,删除其相关的边,循环操作。代码:#include #includ

2014-09-26 09:03:22 1246

原创 UVA10047- The Monocycle(BFS)

题目链接题意:一自行车的轮子被分成5个扇区,涂了5种不同颜色。自行车每1秒要么骑到下一个格子,要么左转或者右转90。。一开始自行车面向北,颜色为绿,到达目标格时,必须触底颜色为绿,但朝向无限制。求到达目标格的最短时间。思路:判重数组多加两维,分别为朝向和颜色,之后就可以用BFS求最少时间了。代码:#include #include #include #

2014-09-25 10:11:17 1202

原创 UVA11624-Fire!(两次bfs)

题目链接题意:你的任务是帮助J走出一个大火蔓延的迷宫。J每分钟可以超上下左右四个方向移动,而所有着火的格子都会往四周蔓延。迷宫中有一些障碍,J和火都无法进入。当J走到一个迷宫的边界格子时,我们认为他已经走出了迷宫。思路:这是大白上面的一道题目,其实只要将每个格子什么时间着火处理出来就可以了。两次BFS,第一次处理格子着火的时间,第二次BFS就是判断是否能在最短时间内走出

2014-09-24 22:51:47 1586

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除