随笔分类 -  图论

hdu 4514
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4514题意:先判断给定的图中是否有环,没有则对森林进行求最长路。思路:dfs判断是否有环,然后对每棵树,两次dfs求最长路,最后取最大的。View Code #include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#pragma comment(linker, "/STACK:36777216")//开大点栈using namespace std; 阅读全文

posted @ 2013-03-23 10:57 aigoruan 阅读(222) 评论(0) 推荐(0)

hdu Robot Navigation
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4166题意:给一个二维地图,一个机器人有三种操作:1、向前走;2、左转90度;3、右转90度。现给定起点和终点,问有多少种不同的操作是最少的。思路:正解应该是先弄出最短路径后,再DFS求解答案,但其实可以直接BFS暴力出答案的。每个点记录四个方向的最少操作,再记录到这个点的这个方向有多少种不同的方向。题目需要判断起点和终点重合的情况。View Code #include<stdio.h>#include<string.h>#include<iostream>#include 阅读全文

posted @ 2012-10-05 19:05 aigoruan 阅读(324) 评论(9) 推荐(1)

A Classic Myth: Flatland Superhero
摘要:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11264&courseid=107题意:在二维平面内给若干点,现在在用一个平行四边形把所有的点都围住,求满足这个条件的最小平行四边形面积。思路:把凸包弄出来后,直接枚举凸包上的两条边,作为平行四边形的相邻边,再求出到这两边最远的两个点,来生成另外两条边。然后知道四条边,可以求出四个顶点,再求面积就好了。View Code #include<stdio.h>#include<string.h>#include<math.h 阅读全文

posted @ 2012-10-04 20:02 aigoruan 阅读(205) 评论(0) 推荐(0)

bnu Treasure Diving
摘要:http://www.bnuoj.com/contest/problem_show.php?pid=26305题意:给一个无向图,现选定图中的k(k<=8)个点,如果最多能走tot米,问最多能经过几个点(要求回到原点)。思路:暴力出k个点之间的最短距离,剩下k个点还是暴力弄。但这样还是超时了,注意到tot最多只是1000000,因为要回到原点,所以距离大于tot的肯定不满足。View Code #include<stdio.h>#include<string.h>#include<iostream>#include<vector>#incl 阅读全文

posted @ 2012-10-04 11:00 aigoruan 阅读(208) 评论(0) 推荐(0)

ZOJ Monthly, September 2012 Matrix Transformer
摘要:把U看成象棋中的车,这样问题转化成:在棋盘上给出若干个车,问能否选出n个车,使得他们之间不会相互攻击。设横轴为X,纵轴为Y,每个车会独占一个X,一个Y,这样问题成转化成:是否存在每个X都可以独占一个Y。到这里,有点二分图基础的就知道是裸二分图了。View Code #include<stdio.h>#include<string.h>#include<vector>#include<iostream>using namespace std;const int maxn = 205;char str[maxn];vector<int>a 阅读全文

posted @ 2012-10-01 21:41 aigoruan 阅读(209) 评论(0) 推荐(0)

2012 2012 ACM/ICPC Asia Regional Jinhua Online Family Name List
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4409思路:建树后,就是裸LCA了,代码写得不好~~~View Code #include<stdio.h>#include<string.h>#include<string>#include<vector>#include<iostream>#include<algorithm>#include<map>using namespace std;const int maxn = 30003;int fa[maxn],pre[m 阅读全文

posted @ 2012-09-22 18:30 aigoruan 阅读(218) 评论(0) 推荐(0)

2012 ACM/ICPC Asia Regional Tianjin Online Travel
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4284思路:预处理15个点之间的最短距离后暴力。View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;const int maxn = 105;const int inf = 1<<29;int dis[maxn][maxn];int h[maxn],d[maxn],c[maxn],vis[maxn];i 阅读全文

posted @ 2012-09-09 18:11 aigoruan 阅读(291) 评论(0) 推荐(0)

hdu 4360
摘要:/*题目大意是给一个n个点m条边的无向图。每条边有权值和一个字母标号,字母标号有四种 'L' 'O' 'V' 'E'现在要从1点到n点去找求找到一条路径,路径按顺序构成了若干个LOVE 注意必须是完整的LOVE然后要求有LOVE的的条件下路径最短,如果有多条最短路,找LOVE最多的那条思路就是拆点将每个点分为四个,代表L,LO,LOV, LOVE四种状态*/#include<stdio.h>#include<string.h>#include<iostream>#include<stdli 阅读全文

posted @ 2012-08-15 20:41 aigoruan 阅读(243) 评论(0) 推荐(0)

hdu 2807
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2807题意:给n个m*m的矩阵,如果A*B=C,说明A到C有长度1的有向边。现要求任意点间的最短路。思路:读完题会感觉是一个暴力的算法。但时间达到80^5,感觉过不了,随后看人家的解题报告,结果暴力都过了,数据有点水吧。但是后来自己写了个暴力,却超时了。人品呀~~~然后问队友,发现有优化的:如果A*B=C,则A*B*D=C*D,D为m*1的矩阵。设d=B*D,则A*B*D=A*d;同样设dd=A*d,cc=C*D;最后比较dd是否等cc就行了。当然,D最好多取几个,以保证答案正确。View Code #inc 阅读全文

posted @ 2012-08-10 18:35 aigoruan 阅读(172) 评论(0) 推荐(0)

hdu 4313 Matrix
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4313思路:有点贪心吧。先设a为b、c的father,分以下三种情况考虑:1、如果a有机器人,b或c也有机器人,则一定要把a和b,c断开。2、如果a、c没有机器人,且b有机器人,设d有机器人,且d为a的father,则问题可以转化成a有机器人,取b到d路径上的最小值。3、如果a没有机器人,且b、c有机器人,则如果a到b的路径大于a到c的路径,则把b的机器人放到a点上,a到c的路径权值加到ans,反之~~~~。这样每次都让叶子结点开始向上归约。每个结点都会进一次队,最后的时间复杂度为O(n).View Code 阅读全文

posted @ 2012-07-28 11:45 aigoruan 阅读(221) 评论(0) 推荐(0)

hdu 2728 && hdu 3829
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3829http://acm.hdu.edu.cn/showproblem.php?pid=2768思路:以cat_lover和dog_lover把观众分为两个集合。只要两个集合内的人的选择有冲突,这两个顶点连接,边代表矛盾,然后求最大独立集。 最大独立集 = 顶点数 - 最小顶点覆盖数(最大匹配数)View Code #include<set>#include<map>#include<stack>#include<queue>#include<cmath 阅读全文

posted @ 2012-07-25 12:02 aigoruan 阅读(202) 评论(0) 推荐(0)

hdu 1054 Strategic Game
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1054题意:给一棵树,选择最小的点数,覆盖整个图。思路:最小点覆盖=最大二分匹配。View Code #include<set>#include<map>#include<stack>#include<queue>#include<cmath>#include<bitset>#include<string>#include<climits>#include<cstdio>#include<vect 阅读全文

posted @ 2012-07-25 10:36 aigoruan 阅读(150) 评论(0) 推荐(0)

hdu 1151 Air Raid
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1151最小路径覆盖=N-最大匹配View Code #include<set>#include<map>#include<stack>#include<queue>#include<cmath>#include<bitset>#include<string>#include<climits>#include<cstdio>#include<vector>#include<utility 阅读全文

posted @ 2012-07-23 17:05 aigoruan 阅读(144) 评论(0) 推荐(0)

hdu 1281 棋盘游戏
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1281题意:一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。算出有多少个这样的重要点。思路:题目没有说出要严格每个车合占一行和一列。先求出最大可放的车数目ans。然后枚举每个位置不放车的情况下,可放车的最大数目tans,如果tans<ans,则计数cnt++。 实在很难想像 阅读全文

posted @ 2012-07-23 16:22 aigoruan 阅读(209) 评论(0) 推荐(0)

poj 1227 RoboContest
摘要:http://poj.org/problem?id=1227题意:给一个无向图,然后在图中的一些点放置一些机器人,机器人在每一秒中都要向相邻的方向走去。问是否存在在某个时刻,每个机器人都在一个点上。思路:利用奇偶性解决,如果图中存在一下奇数环,则一定满足;不然看某个到到达所以机器人的步数的奇偶性是否一样就可以了。View Code #include<set>#include<map>#include<stack>#include<queue>#include<cmath>#include<bitset>#include&l 阅读全文

posted @ 2012-07-18 16:55 aigoruan 阅读(223) 评论(0) 推荐(0)

hdu 3861 The King’s Problem
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3861题意:给出一个有向图,问最少能够分成多少个区域,使得每个区域内的任意一对顶点X、Y间,要么X能达到Y,要么Y能到达X。思路:如果图有环,那么环内的点都是满足的,所以先缩点。然后就是有向图的最小路径覆盖,这就是祼二分图解决。PS:最小路径覆盖 = 点数-最大匹配。 缩点后点数不是原来的N。View Code #include<set>#include<map>#include<stack>#include<queue>#include<cmath> 阅读全文

posted @ 2012-07-18 10:42 aigoruan 阅读(164) 评论(0) 推荐(0)

hdu 4185
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4185题意:给一个二维的地图,地图只有'.'和'#',问最多有多少对‘#’,一对‘#’要相邻。思路:很明显,是一个二分匹配的题目,当时考虑到600*600个点,不敢写,随后弄了个贪心的算法:把地图转化成一个无向图,并记录第个点的度。优先匹配度为1的点,再次是度为2的点,度为3和4的点是不会先匹配的,然后就相当于维护两个队列,并标记每个点是否已被访问和度的变化。这个想法好像没什么 问题,但一直wa。随后想不出有什么好的二分匹配算法,看解题才知道,居然是裸二分图,orz~~~PS: 阅读全文

posted @ 2012-07-18 10:34 aigoruan 阅读(203) 评论(0) 推荐(0)

tarjan
摘要:/*http://acm.hdu.edu.cn/showproblem.php?pid=4183题意:在二维平面上给N个圆,每个圆的都有一种颜色光,每种颜色光的频率是不一样的。但保证一定有两种颜色:一种频率为400(最小),一种频率为789(最大)。现在频率为400的为起点,频率为789的为终点。起点和终点是否能构成一个回路,且起点到终点的路径中光频率要单调递增,终点回到起点的路径中列频率单调递减。思路:可以将圆看成一个点,圆之间相交看成点与点之间的边。这样就可以转化成在一个无向图里求给定点的环问题,因此可以直接套用tarjan求环。但要注意处理无向图中的割点问题。至于路径的单调性,可以这样做 阅读全文

posted @ 2012-07-10 22:45 aigoruan 阅读(241) 评论(0) 推荐(0)

hdu 2460 & poj 3694 Network
摘要:http://poj.org/problem?id=3694http://acm.hdu.edu.cn/showproblem.php?pid=2460题意:给一个无向图,每加入一条新边后,统计桥的数目。思路:看完解题报告后,觉得自己傻了,几乎是暴力的方法。用tarjan先统计图中的每个桥,并标记(以桥的出点作标记,即:uv是桥,标记v),并全部归结到以1为根的树中。查询的时候用类似并差集的方法,不断向根走,同时检查经过的点是不是桥,当u=v的时候就可以退出了。PS:如果原图是一线树,每次查询都选择两端点。可以知道时间复杂度为10^8,真不知道这样也可以过,只能说数据水了,或者说每加入一条边, 阅读全文

posted @ 2012-07-06 15:27 aigoruan 阅读(297) 评论(0) 推荐(0)

poj 3592 & uestc 1315
摘要:http://poj.org/problem?id=3592http://www.acm.uestc.edu.cn/problem.php?pid=1315题目大意:给定一个矩阵,西南角为起点,每个单元都有一定价值的金矿(#表示岩石,不可达,*表示时空门,可以到达指定单元),队#外,每个点只能向右走或向下走,而且可以重复经过一个点。现在要求得最多可以获得多大利益。思路:原矩阵可以看成一个有向图,因为可以重复经过一个点,所以如果图中有环(因为有环),则环内的所有值都可以取完的,所以把环缩成一个点后,就成一棵有向无环图。从起点进行DFS记忆化搜索找最大值就好了。PS:在进行找环缩点时,我认为从起点 阅读全文

posted @ 2012-07-06 12:25 aigoruan 阅读(179) 评论(0) 推荐(0)

导航