
图
文章平均质量分 63
lj_acm
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj 1125
最短路径问题,我用的是临接表来存储各个边的信息,用优先队列的dijkstra算法#include #include #include using namespace std;const int maxn=101;const int INF=2<<20;struct edge { int po,w; edge * next;};struct node{ edge * f原创 2012-10-29 16:25:18 · 428 阅读 · 0 评论 -
POJ 2594
还是DAG上的最少路径覆盖,此题说有的点可以重复走,最后的选择结果,一个点所在路径的下一个点不管是怎么到达的,只要可达就可以。用二分匹配求最少路径覆盖,二分图中边的含义就是i下一个点可走j,所以建二分图时,只要两点可达就连边。floyd求是否可达。#include #include #include #include #include #include #include #inc原创 2013-08-21 10:20:27 · 840 阅读 · 0 评论 -
poj 2226
板子可以横着或竖着放。最后就是求用最少的横着放的或竖着放的板子覆盖所有的‘*’。可知,如果要放一个板子,因为板子可以重叠,所以要放就要把连续的一整块都覆盖。一个‘*’可以被其所在的横着的板子和竖着的板子所覆盖。找出所有可供选择的横着放和竖着放的板子,问题就转化为了从中选取一些板子能覆盖所有的‘*’,二分图最小覆盖解决,横着的板子为点集x,竖着的板子为点集y。#include #include原创 2013-08-21 21:39:58 · 783 阅读 · 0 评论 -
POJ 2516
还是不会建模。。。每个商定所需的物品可能来自不同的仓库,细化就是每一类物品可能来自不同的仓库,再细化就是每一个物品在最后的结果中都有一个在某个仓库中的物品与其匹配。所以对于每一个物品建点,商店的为x集合,仓库的为y集合。在相同的物品见连线,最后用KM求解。其实题目已经给出了提示,k很小0~3,直接对每个物品建图即可。原创 2013-08-22 21:34:44 · 843 阅读 · 0 评论 -
poj 2296
第一道2-SAT,做的挺纠结的主要是添加边的时候不细心,导致各种错误,检查了n遍终于A了。2-SAT问题就是一组布尔变量x,分别代表两种对立的选择。还有一组变量之间的或关系的约束条件。看能否给这些变量赋值,使最后赋值的结果能够满足约束条件。用2-SAT解决关键问题,就是确定变量及其取值所代表的的含义,还有约束条件或关系的确立。我总结了一种方法来确定或关系,就是先写出不满足题目约束条件的与关原创 2013-08-10 00:29:44 · 902 阅读 · 0 评论 -
POJ 3686
尝试着用二分图最大完美匹配来求解此题。把每个商品店j拆成n个点,分别代表倒数第p次在商品店加工,把每个order向每个点连线,权值为p*zij。然后用km求解。#include #include #include #include #include #include #include #include #define LL long long#define myabs(x原创 2013-08-23 16:27:25 · 800 阅读 · 0 评论 -
hdu 4568
最短路 + DP把边界看成一个点和其他treasure点构成了k+1个点,然后求出这k+!个点,任意两点之间的最短路径(因为任何一个最优方案中的边肯定是最短路径),一个图就确定了(可能两个点之间就不可到达,也不需要管,因为他们的最短路为正无穷大),我用的SPFA,用Djikstra写了超时吗,可能是哪没写好。然后可知题目让求的就是从边界这个点访问最多的点并且返回所用的最短路径。也就是经典的TS原创 2013-08-12 00:49:00 · 1011 阅读 · 0 评论 -
hdu 2819
首先如果存在解的话,只换行或换列,就可以得到解。只换行的话,每个列上主对角线上的1肯定是初始状态(没有进行任何交换)中在此列为1的行得来的,构造二分图,x代表行,y代表列, 在g[x][y]=1(也即y列上的1可有第x行得到)的两点连上一条边,进行匹配,得到每一列的1相匹配的行号(初始状态),然后构造一系列交换。#include #include #include #include #原创 2013-08-18 12:05:11 · 964 阅读 · 0 评论 -
hdu 3488
和最少路径的覆盖差不多,先把每个点拆为两个点,分别放在x集合和y集合中,若i->j,那在图中加边xi->yj每种方案和一个完美匹配是对应的。在完美匹配中每个点在x,y集合中的点都有相匹配的点,也就是每个点入度出度都为1.二分图最佳完美匹配模板题,只不过求最小,把边的权值改为负数,求最大即可。#include #include #include #include #inclu原创 2013-08-19 00:01:11 · 825 阅读 · 0 评论 -
POJ 2060
DAG最少路径覆盖、忽略了从一个点到另一个点也要算时间,检查了一晚上,~~~~~#include #include #include #include #include #include #include #include #define LL long long#define myabs(x) ((x)>0?(x):(-(x)))using namespace std原创 2013-08-21 00:58:33 · 779 阅读 · 0 评论 -
poj 1087
二分图匹配+floyd求图中节点是否可达。模型很容易想到。此题我认为用网络流最好解释,如果有device有重复的话。二分图建模比较麻烦。一开始没想到这点,用二分图做的,但是AC了,数据应该没有device重复的情况。然后就是判断一个插头通过适配器能转化成什么其他的插头,刚开始用矩阵乘法来判断这个关系,数据一开到500运行时就运行错误(感觉也不是很大啊,至今还不知道原因),后来在网上发现有用floy原创 2013-08-06 17:34:56 · 657 阅读 · 0 评论 -
poj 1135
Dijkstra最短路模拟每个key的坠落时间,发现就是Dijkstra。求出每个key的时间求其最大值,再求每条边整个坠落的时间,求其最大值,得二者最大值即结果。其中每条边的坠落事件为tv+(cost-(tv-tu))/2,其中u,v为边的两个key节点,tv>tu,cost为边的权值 1 #include 2 #include 3 #include 4 #原创 2013-08-06 17:35:01 · 804 阅读 · 0 评论 -
poj 2253
刚开始没有理解题意,以为是最短路径,后来才发现是prim,哎,无语。。。#include #include #include using namespace std;const int maxn=201;const double INF=2<<20;double x[maxn],y[maxn],edge[maxn][maxn];int n;double getd(int k,i原创 2012-10-27 15:57:01 · 421 阅读 · 0 评论 -
poj 1860
bellman-ford算法,此题可看做最短路径问题,原因是,可把到源点的距离看做负值(自己建立的一个抽象模型,但不表示出来,考虑的时候按这个负值模型考虑)。那么求解此题,就是看有没有至少一个负权环,如果有的话,因为根据此题可知,所以包含这个负权环的任一路径且在这个负权环之后的所有节点都会是无穷小,源点到源点的某一路径一定包含这个负权环,所以只要这个负权环走过一定次数,一定会导致源点到源点的距离小原创 2012-11-03 19:03:34 · 492 阅读 · 0 评论 -
poj 1789
最小生成树的基本知识,此图很稠密,所以选用Prim算法要快,Prim O(n2),Kruckal O(elog2e),向此题,e代表边数,远大于n,顶点数,所以选Prim#include using namespace std;const int maxn=2001;char s[maxn][7];int edge[maxn][maxn];int lit[maxn];int cha原创 2012-10-25 20:27:40 · 474 阅读 · 0 评论 -
poj 3259
刚开始是用的邻接矩阵,一直wa,后来看了其他人的代码,又想了想,两个点之间有多条路径,不能只存储权值最小的,因为每个路径都可能是一个最短路的组成部分(但现在还不是想的太清楚),所以有多少条边,就存多少边的信息bellman-ford#include using namespace std;const int maxn=501;const int inf=2<<20;int d[maxn原创 2012-11-04 20:14:28 · 524 阅读 · 0 评论 -
poj 1062
单源最短路径,此题主要是要理解题目的意思。根据“他和某个地位较低的人进行了交易,地位较高的的人不会再和他交易,他们认为这样等于是间接接触,反过来也一样。”这句话可知,一定要在一符合要求的区间(这个区间的上限和下限要符合等级限制,并且要包括编号1)里找,然后把所有符合要求的区间的值进行比较,从而得到在限制条件下的最短路径#include using namespace std;#define原创 2012-10-26 20:05:31 · 459 阅读 · 0 评论 -
poj 1158
最短路的应用,只不过路径的权值从单一的长度变成了各种耗费时间的和#include #include #include using namespace std;const int maxn=300+10;const int maxm=(50000+10)*2;const int inf=200000000;int head[maxn],dis[maxn],vis[maxn],pre原创 2013-03-12 19:48:20 · 766 阅读 · 0 评论 -
poj 1094
拓扑排序,做的时候wa了n次,后来找来数据,又想了想,发现了自己的错误,就是当拓扑排序的时候出现了不确定的情况,还要在拓扑下去,因为可能还会有矛盾的情况出现,保证没矛盾的情况下才可以说是不确定的情况 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int max原创 2013-08-06 17:34:54 · 757 阅读 · 0 评论 -
poj 1112
二着色+DP在不是互相认识的节点之间连一条边,最后得到由多个连通分量构成的图。把图中节点分为两组,保证图中每条边的两个顶点不能再同一组。对每个连通分量进行二着色,每个连通分量的点就分为了a,b两组。假定最后整个图分为1,2两组。每个连通分量的a,b两组,无非一个在1组一个在2组,通过DP,确定每个连通分量中a,b哪个在1组,哪个在2组时最有。然后就是DP的过程,没想出来,看了其他人的结题报告。原创 2013-08-06 17:34:58 · 812 阅读 · 0 评论 -
poj 1486
可以直接模拟这个过程,可知如果当前有点仅属于某个幻灯片,那么便可确定此点和此幻灯片的匹配关系,反之如果有幻灯片只包括某个点,也可确定此幻灯片和此点的匹配关系,如果没有这两种情况的话,剩下的就不能确定了。#include #include #include #include #include #include #include #include #define LL long l原创 2013-08-18 14:46:36 · 966 阅读 · 0 评论