huangriq

导航

2012年7月29日 #

poj 1904(强连通分量)

摘要: 参考链接http://nightelf.sinaapp.com/2011/poj-1904-%E7%A1%AE%E5%AE%9A%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%88%86%E5%8C%B9%E9%85%8D%E7%9A%84%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD%E8%BE%B9.html题意:n个王子和n个美女要进行配对,每个王子可以喜欢若干个美女,但只能匹配其一个美女,求解每个王子能配对的美女使得其他王子也能成功配对,按升序输出王子能匹配的美女的编号。数据已经给出一个完备匹配。建图:王子到每个喜欢的美女连一条有向边,在给出的完 阅读全文

posted @ 2012-07-29 10:41 huangriq 阅读(187) 评论(0) 推荐(0)

2012年5月12日 #

poj 2400(最小权匹配)

摘要: 题意:给出雇主对雇员的满意度和雇员对雇主的满意度,分数越低代表评价越高,求给出最优匹配方案。当有多种最优匹配,全部输出!思路:典型的最小权匹配,km算法求解View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define inf 0x3f3f3f3f 7 #define N 111 8 int net[N][N],x[N],y[N],lx[N],ly[N],link 阅读全文

posted @ 2012-05-12 23:19 huangriq 阅读(314) 评论(0) 推荐(0)

poj 3613(最短路)

摘要: 题意:求解经过不多于某边数的最短路思路:矩阵连乘,乘的次数就是不多于某边数的最短路,题目给出的顶点需要映射处理View Code 1 #include<iostream> 2 #include<map> 3 #include<stdio.h> 4 #include<string.h> 5 using namespace std; 6 #define N 202 7 struct matrix{ 8 int f[N][N]; 9 matrix(){10 memset(f,0x3f,sizeof(f));11 }12 };13 int num;14 阅读全文

posted @ 2012-05-12 23:12 huangriq 阅读(219) 评论(0) 推荐(0)

poj 3522(生成树)

摘要: 题意:求解一个图中生成树最大边与最小边的最小差值思路:循环去掉小边求残图的最小生成树,求得最小生成树的最长边与最短边的最小差值就是答案,容易证明与最小边差值最小的生成树最大边必然在最小生成树中。View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 #define inf 0x3f3f3f3f 7 #define N 110 8 #define M N*N 9 str 阅读全文

posted @ 2012-05-12 23:05 huangriq 阅读(180) 评论(0) 推荐(0)

poj 2446(二分匹配)

摘要: 题目:http://poj.org/problem?id=2446思路:对相邻的格子染上不同的颜色,并对没障碍物的相邻格子之间连边,建立一个二分图,求是否每个无障碍格子都能被匹配。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 #define M N*N 7 #define N 2020 8 struct edge{ 9 int to,next;10 }e[M] 阅读全文

posted @ 2012-05-12 22:51 huangriq 阅读(185) 评论(0) 推荐(0)

poj 1256(搜索)

摘要: B - BCrawling in process... Crawling failed Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1256DescriptionYou are to write a program that has to generate all possible words from a given set of letters. Example: Given the word "abc", your 阅读全文

posted @ 2012-05-12 22:38 huangriq 阅读(249) 评论(0) 推荐(0)

2012年5月8日 #

poj 2175(费用流消圈)

摘要: 题意:给出n栋房子位置和每栋房子里面的人数,m个避难所位置和每个避难所可容纳人数。然后给出一个方案,判断该方案是否最优,如果不是求出一个更优的方案。思路:很容易想到用最小费用流求出最优时间,在与原方案花费时间对比判断原方案是否最优。但是这种方法会超时的。其实还有一种复杂度更低的方法:判断原方案在费用流模型中是否有负环,如果有,将负环中的每条边流量加一就可以达到更优。定理:一个费用流是最小费用流的充要条件是这个费用流的残量网络没有负费用圈。(我是根据费用流模型加流实现,可以有更好的建图方法)费用流消圈:View Code 1 #include<iostream> 2 #include 阅读全文

posted @ 2012-05-08 09:50 huangriq 阅读(406) 评论(1) 推荐(0)

2012年5月4日 #

poj 2195(最小费用流)

摘要: 题意:一个矩阵中不同位置给出n个人,和n个房子,求解n个人分别回到n个房子的最小时间花费。思路:最大权匹配,可用最小费用流,km算法求解。最小费用流算法:View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 using namespace std; 6 #define inf 0x3f3f3f3f 7 #define N 100010 8 #define M N*10 9 struct edge{ 10 int 阅读全文

posted @ 2012-05-04 14:26 huangriq 阅读(376) 评论(0) 推荐(0)

poj 3041( 最大匹配)

摘要: 题意:给出一个矩阵和一些矩阵上的点,选择最少的行或列把给出的点覆盖。思路:把行看成一个点集,列看成另一个点集,每个给出点构造一条这两个点集中的一条边。我们的问题就变成了选择最少的点把所有的边覆盖。很显然这就是一个最大独立点集问题,可用最大匹配求解。匈牙利匹配算法:View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 #define N 10010 6 #define M 20020 7 struct edge{ 8 in 阅读全文

posted @ 2012-05-04 14:19 huangriq 阅读(271) 评论(0) 推荐(0)

2012年4月25日 #

poj3635(最短路)

摘要: 题意:给出一个有权无向图,顶点代表不同的城市,给出每个城市的汽油价格,一个单位的路程要消耗一个单位的汽油。然后给出汽车油箱的容量c,起点和终点,求出起点到终点的最小花费。思路:把每个点拆成c+1个点,每次只能加1个单位的汽油,然后用dijstra求解。View Code #include<iostream>#include<stdio.h>#include<string.h>#include<queue>using namespace std;#define N 1010#define M 100010#define inf 0x3fffffff 阅读全文

posted @ 2012-04-25 00:03 huangriq 阅读(330) 评论(0) 推荐(0)