图论
文章平均质量分 76
saucyJack
外科
展开
-
poj 3311 Hie with the Pie(Floyd+状压dp)
传送门:http://poj.org/problem?id=3311 经典的旅行商问题。 dp[i][j]表示在i状态下到达j城市的最优解(i=1 dp[i][j]=min(dp[i][j],dp[i^(1 #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; const原创 2016-02-15 21:38:06 · 234 阅读 · 0 评论 -
POJ 1094(拓扑排序)
题目链接:http://poj.org/problem?id=1094 题意:给出多组关系,判断能否组成唯一的拓扑排序。 思路: 判断三种情况: ①是否有环 ②是否有序(唯一性) ③能否组成拓扑排序 这题还是比较纠结的,应该先考虑是否唯一,然后判断能否形成拓扑排序,在考虑是否有序。 #include #include #include #include #include #incl原创 2016-01-24 15:57:46 · 294 阅读 · 0 评论 -
POJ 3026 (BFS+Prim)
题目链接:http://poj.org/problem?id=3026 题意: 给出一个迷宫,连接迷宫中所有字母,每一格代价为1,求最小代价。 思路: 这题wa了9发= =! 题目很坑,要不是看了Discuss估计这个寒假都过不去这题。 先说一下思路,BFS预处理每一个字母到其他所有字母的距离,用数组记录下来,然后用Prim求出连接所有字母所需要的代价,即最小生成树。 这题难点在于一原创 2016-01-24 12:06:43 · 366 阅读 · 0 评论 -
POJ 2485(最小生成树)
题目链接:http://poj.org/problem?id=2485 题意:求最小生成树的最大边,继续Kruskal水过。 #include #include #include #include #include using namespace std; const int maxn=505; int T,n,m; int map[maxn][maxn]; int f[maxn],r[ma原创 2016-01-24 10:14:32 · 309 阅读 · 0 评论 -
POJ 1258(最小生成树之Kruskal)
题目链接:http://poj.org/problem?id=1258 /***** 最小生成树:Kruskal ***/ #include #include #include #include #include using namespace std; const int maxn=105; int T,n,m; int map[maxn][maxn]; int f[maxn]原创 2016-01-24 10:04:03 · 274 阅读 · 0 评论 -
POJ 1789 (最小生成树之Kruskal算法)
题目链接:http://poj.org/problem?id=1789 题意:给出多个字符串,每两个字符串之间不同的字符数作为一个字符串衍生出另一个字符串的代价,求出如果衍生出所有的字符串需要的1/Q(Q为总代价)。 这题的难点应该就在于如何将这个问题转化成最小生成树模型。每两个字符串之间都需要连一条线,得到的是一个完全图,然后求出最小生成树。 一开始考虑的是稠密图用Prim()算法原创 2016-01-24 09:51:09 · 737 阅读 · 0 评论 -
poj 1330 Nearest Common Ancestors(离线LCA)
题目链接:http://poj.org/problem?id=1330 题意:T组样例,n-1条边,1次询问,求最近公共祖先。 #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int maxn=10010; int T,n; int degree[maxn],vis[max原创 2016-03-14 20:03:06 · 181 阅读 · 0 评论 -
[Usaco2008 Oct]灌水(MST)
题意:Farmer John已经决定把水灌到他的n(1 思路:加一个超级源点,然后跑一遍MST。作为一个经典的题纪录一下。 #include using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; const int maxn=305; int T,n,m; int w[maxn]; int G[maxn]原创 2016-04-12 23:53:41 · 232 阅读 · 0 评论 -
Zju1654 Place the Robots(二分图最大匹配)
首先总结一些二分图的概念和性质: 最大匹配: 图中包含边数最多的匹配称为图的最大匹配。 完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。 最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数 最小路径覆盖: 用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图原创 2016-04-09 23:03:52 · 451 阅读 · 0 评论 -
二分图的基本模型思想
(在网上看的博客,因为博主也是转载而且未附上链接,不好意思) 今天突然想到一个关于二分图的灰常xx的比喻,所以赶紧写下来。 假设全班的男生集合为R1,女生集合为R2,男生分别记为m1,m2……女生分别记为w1,w2……。最近全班学生大多数都寂寞了,想谈恋爱了于是大家都在物色目标。其中有不少男女生互相之间都有好感。但一个男生可能对多个女生有好感,一个女生也可能对多个男生有好感(都转载 2016-04-10 23:01:04 · 342 阅读 · 0 评论 -
POJ 3041(匈牙利算法)
题目链接:http://poj.org/problem?id=3041 题意:求二分图最大匹配。 思路:直接手搓了一份匈牙利算法的模版,练习一下吧。 #include #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int maxn=505;原创 2016-01-24 18:22:06 · 256 阅读 · 0 评论 -
POJ 3020(二分图之最小路径覆盖)
题目链接:http://poj.org/problem?id=3020 题意:给出n行m列字符,‘*’表示城市,‘o’表示空地,在城市建立无线覆盖,每个可以覆盖到相邻的城市,并且已被覆盖的城市不能被再次覆盖,求能覆盖所有的点的最少的边。 思路: 这题是最小路径覆盖问题,利用一个定理: 最小路径覆盖=顶点数-最大匹配数 题目的难点应该在于如何建图,建立二分图的模型。 先给每个城市编号,以原创 2016-01-24 20:48:28 · 308 阅读 · 0 评论 -
poj 1724 ROADS
传送门:http://poj.org/problem?id=1724 注意有重边! ①Dijsktra+优先队列(16ms): #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int maxn=10010; int T,n,k,r,e; i原创 2016-02-16 16:49:12 · 215 阅读 · 0 评论 -
poj 2983 Is the Information Reliable?(差分约束)
难点在于如何建立差分约束系统。 P:A-B=CA-B V:A-B>=1B-A 这样就可以建立 #include #include using namespace std; const int INF=0x3f3f3f3f; const int maxn=1010; int n,m,e; int dis[maxn]; void init(){ e=0; memset(dis,INF,原创 2016-02-06 00:28:56 · 188 阅读 · 0 评论 -
poj 1201 Intervals(差分约束)
题目链接:http://poj.org/problem?id=1201 题意:给出多个区间[ai,bi],每个区间和集合S有ci个相同的元素,求集合s中至少有多少个元素。 dis[i]表示从源点到i的所有元素中与s相同的个数,那么可以得到dis[bi+1]=dis[ai]+ci,因为是闭区间,所以有bi+1。 但是为了保证图的连通性,仅仅依靠所给的数据是不够的,题目中暗藏一个隐含条件: d原创 2016-02-05 21:43:07 · 185 阅读 · 0 评论 -
poj 3159 Candies(差分约束系统)
题目链接:http://poj.org/problem?id=3159 以下定义摘自百度百科: 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi 求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。 观察xj-xi 这道题是一个模版题,注意不能用spf原创 2016-02-05 19:17:15 · 230 阅读 · 0 评论 -
POJ 2031 Building a Space Station(MST)
题目链接:http://poj.org/problem?id=2031 题意:有n个球的坐标及半径,如果两个球相交,则视为连通,否则添加一条边使其连通,求所需要连接的边的最小费用。 题目看起来初觉是计算几何,但是仔细想一想,其实就是MST的一道题,很有意思。 计算任意两个球之间的最小距离即圆心距-两圆半径之和 若最小距离 若最小距离>0,说明两圆相离,需要添加边,边权即为最小距离 最终原创 2016-02-03 21:57:42 · 200 阅读 · 0 评论 -
最短路算法(Floyd、Dijsktra、Bellman-Ford、SPFA)
最短路算法基本可以分为以下两个步骤: ①初始化(任意两边的距离) ②松弛操作 在图论中,最关键的是如何建图。 在最短路算法中,首先要处理数据,在这个时候,要考虑该用那种方式建图。 比较常见的建图方式:邻接链表、邻接矩阵、前向星、链式前向星、十字链表。 对于这五种建图方式,在这里不做详细讨论,只是大概介绍一下优点和缺点。 邻接链表:适合点多的图 邻接矩阵:适合边多的图 链式前向原创 2016-01-31 23:15:21 · 608 阅读 · 0 评论 -
POJ 1062(Dijsktra)
题目链接:http://poj.org/problem?id=1062 好不容看到一道中文题..很激动但还是看不懂啊,感觉中文题反而更难了.... 这题是最短路的问题,discuss里也有DFS爆搜做的,没仔细看,题目很经典。 感觉建立图论模型真的异常艰难。 这道题的难点在于如何建立Dijsktra算法模型,假定增加一个起点0,到终点1,共有N个点,经过其中n个点,要求按照等级从小原创 2016-01-25 11:58:54 · 252 阅读 · 0 评论 -
POJ 3259(最短路径)
题目链接:http://poj.org/problem?id=3259 题意:现在有n个点,m条边,w个虫洞,给出m个a,b,c,表示从a到b需要花费c时间,从b到a需要话费c时间,然后给出w个a,b,c,表示从a到b花费-c个时间,问是否存在一条路径使得最终回到源点的时间比初始时间小。 思路:最短路径,Bellman-Ford或SPFA判断是否存在负环的问题。 注意:数据范围比题目中给的略原创 2016-01-25 09:50:41 · 380 阅读 · 0 评论 -
POJ 1860(最短路之Bellman-Ford)
题目链接:http://poj.org/problem?id=1860 题意:首先给出四个数n,m,s,v,分别表示n种货币,m个兑换关系,s源货币,源货币的本金v 然后给出m行,每行给出6个数beg,end,r1,c1,r2,c2,分别表示beg和end货币兑换的比率和手续费,end和beg货币兑换的比率和手续费 。问能否通过货币兑换使手里的源货币依然是第s中货币,并且本金增多。 思路:原创 2016-01-24 23:32:13 · 802 阅读 · 0 评论 -
Pku2831 Can We Build This One?(次小生成树)
题意: 某国计划修建若干高速公路,用来连接国内N个城市,经过一番细致的考察后,政府迁出了M条待建的公路 每条公路用三个整数(x,y,z)来,即城市X与城市Y之间可以修一条高速公路,需要Z的花费。出于节约,政府希望从这些公路出选一些出来修建,使总开支最小。并保证建造后任意两个城市之间都可以直接或间接相连。但往往只考虑费用并不能得到最有价值的方案,例如城市A与城市B之间活动较频繁为了方便这两个城原创 2016-04-20 23:16:49 · 360 阅读 · 0 评论