上一页 1 ··· 66 67 68 69 70 71 72 73 74 ··· 85 下一页
  2011年10月14日
摘要: UVA_10030对于题目中每个点的容量的限制,我们可以把一个点i拆成两个点2*i和2*i ^ 1,并连一条有向边2*i->2*i^1,容量为该点的容量限制,在建图的时候从2*i流入并从2*i^1流出即可。#include<stdio.h>#include<string.h>#define MAXD 210#define MAXM 81000#define INF 100000000int N, flow[MAXM], first[MAXD], next[MAXM], u[MAXM], v[MAXM], e;int work[MAXD], d[MAXD], q[M 阅读全文
posted @ 2011-10-14 14:32 Staginner 阅读(349) 评论(0) 推荐(0) 编辑
  2011年10月13日
摘要: URAL 1664这个题目中间有一大段是用来迷惑的,其实源点就是1,汇点就是N。最后输出的时候注意流量要从A流到B即可,并且每条边要顺序输出。#include<stdio.h>#include<string.h>#define INF 0x7FFFFFFF#define MAXD 10010#define MAXM 10000010int first[MAXD], next[MAXM], u[MAXM], v[MAXM], N, M, e;long long int cap[MAXM], flow[MAXM];int S, T, work[MAXD], d[MAXD], 阅读全文
posted @ 2011-10-13 05:10 Staginner 阅读(310) 评论(0) 推荐(0) 编辑
摘要: POJ_3469 纠结了好久,终于仿写成了非递归的dinic……#include<stdio.h>#include<string.h>#define INF 1000000000#define MAXD 20010#define MAXM 1000010int A[MAXD], B[MAXD], f[MAXM], N, M, e;int first[MAXD], next[MAXM], u[MAXM], v[MAXM], d[MAXD];int q[MAXD], s[MAXD], work[MAXD];void add(int a, int b, int w){ u[e 阅读全文
posted @ 2011-10-13 05:04 Staginner 阅读(295) 评论(0) 推荐(0) 编辑
  2011年10月12日
摘要: SPOJ_1771 通过这个题目进一步训练了Dancing Links解决N皇后问题的技巧。#include<stdio.h>#include<string.h>#include<stdlib.h>#define INF 1000000000const int MAXN = 50;const int MAXmn = MAXN * MAXN * 4 + MAXN * 6 + MAXN;const int MAXnn = MAXN * 6 + MAXN;int N, size;int U[MAXmn], D[MAXmn], L[MAXmn], R[MAXmn], 阅读全文
posted @ 2011-10-12 01:15 Staginner 阅读(394) 评论(0) 推荐(0) 编辑
  2011年10月10日
摘要: POJ_3076为了练一下自己对Dancing Links的熟悉程度,做了一下这个题目。由于对题目中的一句话理解没有到位The program prints the solutionof the input encoded grids in the same format and order as used for input,导致最后输出之间没有空行。一定要注意审题呀!#include<stdio.h>#include<string.h>#define INF 1000000000const int N = 16;const int mn = N * N * N * 阅读全文
posted @ 2011-10-10 19:46 Staginner 阅读(245) 评论(0) 推荐(0) 编辑
摘要: POJ_3074 为了练一下自己对Dancing Links的熟悉程度,做了一下这个题目。#include<stdio.h>#include<string.h>#define INF 1000000000const int N = 9;const int mn = N * N * N * 4 + N * N * 4 + N;const int nn = N * N * 4 + N;int U[mn], D[mn], L[mn], R[mn], H[mn], C[mn], X[mn];int S[nn], Q[nn], visc[nn], size;char b[nn]; 阅读全文
posted @ 2011-10-10 18:13 Staginner 阅读(411) 评论(0) 推荐(0) 编辑
摘要: HDU_4069记得前一天我还在群里讨论数独的事情,才知道了又dancing links这么一回事,结果第二天的福州网赛居然就出了一个数独……学了Dancing Links之后终于把这个题目A掉了,这个题目与普通的数独不同之处就在于分组的问题,以前是一个小九宫里不能重复1-9,而这次的形状是不规则的,需要先用深搜将图分成9个小组,再进行进一步的处理。#include<stdio.h>#include<string.h>#define INF 1000000000const int N = 9;const int mn = N * N * N * 4 + N * N * 阅读全文
posted @ 2011-10-10 16:40 Staginner 阅读(504) 评论(0) 推荐(0) 编辑
摘要: HDU_1426这个题目貌似是可以用深搜做的,但是我实际上是为了演练Dancing Links才选做的这道数独里的简单题。Dancing Links的基本思想就是把图转化成0-1矩阵并最终化归成选出若干行使得每列有且恰有一个1的问题。推荐两个文章,一个是momodi写的《DancingLinks在搜索中的应用》,这个在http://wenku.baidu.com/view/4ab7bd00a6c30c2259019eae.html可以下载得到,另外就是Knuth写的《Dancing Links》论文的翻译版。 如果你看完这些之后向我一样虽然对算法思想有了大概了解,却不知道代码怎么写,尤其是不知 阅读全文
posted @ 2011-10-10 01:22 Staginner 阅读(344) 评论(0) 推荐(0) 编辑
  2011年10月8日
摘要: HDU_3315由于要求求满足收益最大情况下改变顺序最少的方案,因此我们在建图的时候可以将权值乘以一个常数,然后对原有边的权值自加一个较小量来体现出对该边的“偏好”。#include<stdio.h>#include<string.h>#define MAXD 110#define MAX 1010#define INF 1000000000int V[MAXD], H[MAXD], P[MAXD], S[MAXD], X[MAXD], N;int A[MAXD], B[MAXD], slack, visx[MAXD], visy[MAXD];int G[MAXD][M 阅读全文
posted @ 2011-10-08 22:45 Staginner 阅读(352) 评论(0) 推荐(0) 编辑
摘要: CF 118E首先这个题目需要去判断原图是否是一个双连通分量,因为如果不是双连通分量的话,那么最后在桥的位置就是单向的,只能由一块走到另一块,而不能由另一块走回来。同时,如果原图是双连通分量,那么就一定有解,因为至少存在一个欧拉回路,而其他路的方向就无所谓了,因此在输出的时候只要用dfs顺序将每个边输出一次即可。但问题在于如果分两块去做——先用tarjan判双连通、然后dfs打印路径,这样会超时,我们反思一下判双连通时tarjan算法的本质就是一个dfs,因此我们在判双连通的时候不妨先把各个需要打印的边存下来,如果最后有解就顺序输出即可,这样就节省了不少的时间。#include<stdi 阅读全文
posted @ 2011-10-08 16:06 Staginner 阅读(348) 评论(0) 推荐(0) 编辑
上一页 1 ··· 66 67 68 69 70 71 72 73 74 ··· 85 下一页