
图论
zhang360896270
任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动。
展开
-
hdu1102 & hdu1162 & hdu1232 & hdu1233
<br />今天情人节,悲剧的我只能在家看算法。。。此次带来最小生成树,以上四道题目大同小异。。。都可以用邻接矩阵存储图,然后采取prime算法实现最小生成树的创建。。建立lowcost[size](存储最小生成树)数组,先取第一个顶点到其余顶点的权值初始化lowcost,然后找到关于此点最小的权值以及另一顶点位置k,累加该最小权值同时将visited[k]置为1,然后更新lowcost[size]数组,查找下一个顶点与其余各点的权值,如果比当前lowcost[i]小即可覆盖lowcost[i],然后重复上原创 2011-02-14 17:32:00 · 838 阅读 · 0 评论 -
ZOJ2676 Network Wars
此题是0-1分式规划+最大流,大意是给定n个点m条边求一个割让这个割中的全部边权除以边数最小,设x 为当前图中依据题意得到的割G(S, T)的最优结果,则x = Sigma (S)/C, C为当前S割中边数和,然后移项可得x*C - Sigma (S) == 0,令g(x) =原创 2011-07-31 17:58:56 · 809 阅读 · 0 评论 -
poj1149 PIGS
记得某位大牛说过网络流如果建模都是别人告诉你的,那么这个题目就废了。。。ORZ。。以后关于网络流就只说建模方法吧题目大意是给你M个猪舍,N个买猪的人,每个人有k把钥匙可以打开k个不同的猪舍,每个人要买一定数量的猪,买完后,此次打开的猪舍里的猪可以相互流动建立新的源点和原创 2011-07-31 16:33:31 · 612 阅读 · 0 评论 -
poj2391 Ombrophobic Bovines
这题是一道很好的最大流题目,题意是给定F个牛棚和P条路径,每条路径有一个权值,现在每个牛棚有一定的容量和牛数,因为牛棚牛数可能大于容量,所以要牛棚之间的牛要进行相互地移动,每移动一个距离就花费一单位的时间,求从开始移动到每头牛都移动到牛棚的最小时间显然建模是从源点S连接每一个原创 2011-08-01 14:23:49 · 1552 阅读 · 0 评论 -
POJ2267 From Dusk till Dawn or: Vladimir the Vampire
题目大意是一只吸血鬼(--!)要从一座城市抵达另一座城市,但是他只能乘坐火车,每个城市之间的火车都有一个到站时间和发车时间,既然是吸血鬼,那么每到中午12:00就要喝一公升的鲜血,吸血鬼只能乘坐区间段在0:00~6:00或者18:00~0:00之间的车(也就是说发车时间和抵达时间原创 2011-09-01 10:06:24 · 1129 阅读 · 0 评论 -
POJ2472 106 miles to Chicago
简单最长路径,一个小技巧就是将每条边权值取对数,然后SPFA一次就可以了#include #include #include using namespace std;const int MAXN = 110;const int MAXM = MAXN*MA原创 2011-09-03 10:58:21 · 960 阅读 · 0 评论 -
POJ2060 Taxi Cab Scheme
注意一辆太可惜是从一个起点到达终点再从这个终点抵达下一个位置的起点,最小路径覆盖#include #include using namespace std;const int size = 600;struct node{ int原创 2011-08-29 20:11:09 · 691 阅读 · 0 评论 -
POJ2112 Optimal Milking
二分+最大流#include #include using namespace std;const int MAXN = 250;const int MAXE = MAXN*MAXN;struct node{ int v, w, next;原创 2011-09-04 21:50:54 · 745 阅读 · 0 评论 -
POJ2226 Muddy Fields
最小点覆盖#include #include using namespace std;const int size = 700;char mapp[60][60];int num1, num2;int mapp1[size][size], mapp2[size][原创 2011-09-05 20:29:40 · 766 阅读 · 0 评论 -
hdu1054Strategic Game
简单的二分匹配,由于是树故必不存在奇数回路,如果是图应该先染色判断能否构成二分图,这题数据貌似异常强大#include using namespace std;const int size = 1510;struct node{ int u,原创 2011-08-14 09:58:09 · 471 阅读 · 0 评论 -
POJ1275 Cashier Employment
最近觉得图论的很多题目都是难在建模。。。这题虽然是比较明显的差分约束但是一直没能建出不等式模型,后来在搜索相关资料的时候看到了建模方法,在纠结了一阵子之后终于干掉了。首先我们设定三个数组num[i](i时刻能够开始工作的人数)、s[i](实际雇佣的人数到i之和)、r[i](i原创 2011-08-21 16:13:56 · 1042 阅读 · 0 评论 -
POJ1364 King
比较简单的差分约束,注意由于差分约束只能处理=)的不等式,所以要处理一下value另外判断负权回路要先将出现的元素入队一次,不然会WA#include #include using namespace std;const int MAXN = 110;co原创 2011-08-22 13:16:46 · 730 阅读 · 0 评论 -
poj1201 Intervals(差分约束)
差分约束第一题,差分约束就是解一系列的形如x1-x2=)a的不等式,由于移项之后为x1=)x2+a和最短路径的dist[i] ) dist[u] + mapp[u][i]联系 起来,故可以用最短路bellmanford和SPFA求解显然dist[i]和dist[u]都为方程的原创 2011-07-21 15:15:25 · 747 阅读 · 3 评论 -
POJ3921/HDU2485 Destroying the bus stations
题目大意是给你一个图,每条边权值为1,你在其中毁坏多少个点可以使得从1到n至少要花费k+1的时间显然意思就是要求对于一条边(u,v)dist[1][u]+dist[v][n]+1u的最短路径都大于k则说明这条路径上的点u、v可以暂时不予考虑我们只考虑 dist[1][u]原创 2011-08-25 13:30:46 · 1872 阅读 · 1 评论 -
hdu2686Matrix && hdu3376 Matrix Again
这两道题目除了数据大小不同外是一模一样的题目大意是给定一个n*n的矩阵,yifenfei从起点(1, 1)这个位置一直取数到(n,n),每取完一个数,下一个只能取当前数右方或者下方的一个数,(注意两个数之间的距离应该是1,之前以为下方或者右方任何一个数都可以取),就这样取到(原创 2011-08-27 14:05:22 · 929 阅读 · 0 评论 -
POJ图论题集(无思路版)
1062* 昂贵的聘礼 1087* A Plug for UNIX 1094 Sorting It All Out 1112* Team Them Up! 1125 Stockbroker Grapevine 1135 Domino Effect 1149原创 2011-07-18 14:35:01 · 952 阅读 · 0 评论 -
hdu3832 Earth Hour
实际上此题是求最少用多少个点可以覆盖掉1、2、3这三个点,也就是一个覆盖的问题,求最少的灯数覆盖掉1、2、3,那么我们可以依照最短路径SPFA求法,首先建立模型,显然mapp[i][j]表示第i盏灯和第j盏灯是否相交或者相切,是则赋值为1,否则为0,然后SPFA三次判断1、2、3原创 2011-07-19 20:04:11 · 794 阅读 · 0 评论 -
poj1094 Sorting It All Out
一道有点猥琐的拓扑题,之前对于输出样例的数字有点不太理解,后来明白是推到给定的第几组输入可以唯一确定一个拓扑的结果(唯一、没有、还是有回路),那么就需要我们输入一条边处理一条边,每对一次输入拓扑之后要记得把入度加回去在最后附上测试数据供各位查找错误#include #includ原创 2011-07-19 09:08:16 · 1577 阅读 · 0 评论 -
poj1062 昂贵的聘礼
做这题代价确实很昂贵,从昨天晚上一直到今天上午都在debug,今天上午提交还出现各种WA。。。比较明显的最短路,有几个地方要注意一下,首先建图有个地方要注意以下,这题是用临界矩阵存储的有向图,而且是由交换品指向购买品,然后将虚节点设为购买品的价值,最后枚举每一个可能地位区间di求原创 2011-07-18 10:04:54 · 1539 阅读 · 0 评论 -
hdu1272 小希的迷宫
<br />中文题。。题意不需解释。。。并查集题目,判断条件显然为所有输入的点都已经访问到并且总集合数为1,同时如果对当前输入的两个点,他们的root必须不一样,因为如果一样即可以从这两个点的任意一个点出发访问到另一个点。。。如上述条件都满足则可以输出Yes,反之输出No。本人此题RE了N次,表示如果OJ显示STACK FLOW就是main()函数里面的数组开多开大了,少用数组即可。。。<br />代码如下:<br /><br /># include <iostream><br />using namesp原创 2011-03-10 12:02:00 · 1389 阅读 · 0 评论 -
hdu1385 Minimum Transport Cost
<br />昨天晚上做这个题目到1点钟也没有发现错误,后来火大,果断重新开始写,今天下午终于AC。。算法为floyd+dfs,先使用floyd求出最短路,然后从起点开始深搜到终点并且记录路径,由于i从1开始遍历,因此所找到的第一条最短路路即为字典序最小路径,需要注意一下终点没有税,而且只需要输出字典序最小的那一条路。<br />AC代码如下:<br /><br />#include <iostream><br />using namespace std;<br />const int len = 110;<原创 2011-03-13 17:26:00 · 688 阅读 · 0 评论 -
hdu1045 Fire Net(最大二分匹配)
<br />这个题目因为数据范围比较小,貌似可以用多种算法求解,本人目前暂时使用最大二分图匹配,使用的是行和列匹配。。。。。水平不高,开的数组比较多,mapr表示对地图的行进行编号,每行中被X隔开的地方编号,同理将列也如是编好序号,这样都编号完毕后开始组建二分图,以行和列的编号作为二分图的X,Y集合,然后计算最大二分匹配即可。<br /> <br />例如:<br />4<br />.X..<br />....<br />XX..<br />....<br />则行标号结果为:<br />4<br />1原创 2011-04-12 21:40:00 · 851 阅读 · 0 评论 -
hdu1083 Courses
<br />最大二分匹配,注意不要把m,n弄反<br /># include <stdio.h><br /># include <string.h><br />int ma[301][301];<br />bool flag[301];<br />int mark[301];<br />int t;<br />int n, m;<br />int hungary(int x)<br />{<br /> for (int i = 1; i <= m; i ++){<br /> if (ma原创 2011-05-10 19:34:00 · 579 阅读 · 0 评论 -
hdu1272 小希的迷宫
昨天挂了场比赛,发现好久没写并查集都生疏了,今天就又拿了道之前的老题目来做了下, 题目不难,要注意的地方都加了注释,如果有错误欢迎大牛指正#include using namespace std;const int size = 100100;int root[size];int原创 2011-07-10 11:08:30 · 447 阅读 · 0 评论 -
poj1125 Stockbroker Grapevine
水题,FLOYD0ms过掉,题目大意是说给你n个人可以联系的人和联系他们需要花费的时间,你求出把所有人都联系到的最少花费时间,显然要用floyd求出每一个人对其他人的最少花费,然后求出每一行中最大的值,在这些最大值中取一个最小的就可以了,记得处理i==j的情况,居然没能1Y,杯具原创 2011-07-21 16:48:43 · 553 阅读 · 0 评论 -
poj1135 Domino Effect
这题之前以为就是找一条最长路径然后比较最长路径节点a和a相邻节点j,通过公式(dist[a]+dist[j]+mapp[a][j])算出的最大值就可以了然后发现样例数据中出现了正权回路,那果断会陷入死循环,这样搞得我的思路也陷入死循环了,后来偶然间瞟见某大牛博客上说其实是单源最短原创 2011-07-23 20:04:53 · 883 阅读 · 0 评论 -
poj1273 Drainage Ditches
基础的网络最大流。。。Edmonds-Karp算法飘过。。。#include #include using namespace std;struct node{ int num, value; };const int size = 210;int ma原创 2011-07-24 10:12:21 · 496 阅读 · 0 评论 -
hdu3861 The King’s Problem
hdu终于开服了,这题果断AC,题目大意国王要给城市划分州,要求是如果互相联通的要画在一个州,并且相连两个州之间不能有城市,可以想到是强连通+最小路径覆盖,然后就比较好求解了,注意这里数组要开到100000+不然会WA(之前比赛开5100WA了N次。。血泪史啊。。。)原创 2011-07-21 19:59:56 · 1232 阅读 · 0 评论 -
hdu2819 Swap
就是简单的二分匹配,行和列匹配就可以了,关键是点不在于匹配而在于排序,因为匹配后的match存储的是列的匹配对象,所以只需要把列从小到大(或者从大到小,因为是special judge,所以主副对角线都是一样)排序,每排序一次就保存当前交换了的下标,注意这里不能用冒泡而最好用选择原创 2011-07-15 16:28:57 · 1117 阅读 · 0 评论 -
poj2186 Popular Cows
题目很短,大意是给你牛和牛之间相互仰慕的状况,如果A仰慕B,B仰慕C则A必定仰慕C,要求输出被所有牛仰慕的牛有多少。首先题目要求的牛要被所有的牛仰慕,那显然必须构成一个联通图那么每一个点都要有入度或者出度,考虑这种情况:如果某只牛没有出度,那么就意味着他不仰慕别的牛只是被别人仰慕原创 2011-07-16 11:19:19 · 522 阅读 · 0 评论 -
hdu2544 最短路(SPFA算法)
SPFA算法,留个爪 #include #include using namespace std;const int eps = 1000000;const int size = 110;int maze[size][size];int n, m;int dist[size];i原创 2011-07-16 20:27:26 · 648 阅读 · 0 评论 -
hdu3478 Catch
首先可以推断出图要是联通的并且要有奇数条边的回路才能输出YES,因为从一个点开始沿着一个环分别向左右两个方向遍历,只有当前环的结点数为奇数的时候左右两个方向到同一个点是一奇一偶的,这样就说明存在某一时刻可以让贼出现在各个位置,因为这个点奇偶都可达,那么只需要进行一次BFS并且01原创 2011-07-17 14:04:33 · 1170 阅读 · 0 评论 -
POJ图论题集
1062* 昂贵的聘礼 枚举等级限制+dijkstra1087* A Plug for UNIX 2分匹配1094 Sorting It All Out floyd 或 拓扑1112* Team Them Up! 2分图染色+DP1125 Stockbroker Grapevin原创 2011-07-17 10:11:24 · 1288 阅读 · 0 评论 -
hdu2255 奔小康赚大钱
KM,最大带权二分匹配#include #include #include using namespace std;const int maxn=310,OO=INT_MAX;int w[maxn][maxn];int lx[maxn],ly[maxn];int linky[ma原创 2011-07-17 19:17:00 · 698 阅读 · 0 评论 -
欧拉回路及哈密顿回路浅见(UVA10054\POJ 2230\POJ2438\HDU1116)
欧拉图:在图为连通图的前提下,欧拉通路:当前图中经过每条边一次且仅一次,若最终回到出发点则称为欧拉回路。相关判定条件(图联通) (1)无向图存在欧拉回路的条件是:图中不存在奇度结点,有向图存在欧拉回路的条件是:每个结点出度均等于入度。 (2)无向图存在欧拉通路的条件是:图中仅存在两个奇度结点(起点和终点),有向图存在欧拉通路的条件是:存在两个结点入度原创 2013-04-01 16:03:11 · 6296 阅读 · 0 评论