摘要: 域名的由来:很喜欢冰河世纪3里的勇士巴克,而且性格和我非常相像(Buck-Meister),于是我的域名就用Buck-Meister咯。 阅读全文
posted @ 2013-04-05 14:13 Buck Meister 阅读(294) 评论(0) 推荐(0) 编辑
  2013年11月7日
摘要: 状态搜索,一开始通过所有的入口开始bfs,超时了。其实可以通过加状态的方法来减少搜索的复杂度。即通过Time[x][y][dn],表示走到x,y坐标,当前携带炸弹为dn的步数的最小值。把所有出口入队,然后广搜。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 110;const int INF = 0x3f3f3f3f;char map[maxn][maxn];int Time[maxn][m 阅读全文
posted @ 2013-11-07 22:12 Buck Meister 阅读(178) 评论(0) 推荐(0) 编辑
  2013年9月12日
摘要: afasf,令T[i] = a1+a2+....ai;则Si = a[Si]+a[Si+1]+...a[Si+ni] = T[Si+ni]-T[Si-1];以T[i]为节点,i的范围为0#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 2010 + 10;const int INF = 0x3f3f3f3f;struct Edge{ int from, to, dist; Edge... 阅读全文
posted @ 2013-09-12 18:50 Buck Meister 阅读(326) 评论(0) 推荐(0) 编辑
  2013年8月17日
摘要: 有些数据本身很大,自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。 使用STL算法离散化: 思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。 假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:#include #include #include #include #include #include #include #include #include #include using namespace std;in 阅读全文
posted @ 2013-08-17 16:06 Buck Meister 阅读(924) 评论(0) 推荐(0) 编辑
  2013年8月12日
摘要: 思路:其实在沿着残余网络找到增广路径时,找到有着最小流量的那一条边,然后找所有流量中最大的那一条即可。因为在增广时,如果是最小容量的话,那么这是这条增广路能通过的最大的车流量(也就是割边),然后取最大值即可。#include #include #include #include #include using namespace std;const int maxn = 1010;const int INF = 0x3f3f3f3f;struct Edge{ int from, to, cap, flow; Edge(int from, int to, int cap, int fl... 阅读全文
posted @ 2013-08-12 15:51 Buck Meister 阅读(199) 评论(0) 推荐(0) 编辑
  2013年8月4日
摘要: 问一个无向图是否存在欧拉路径。条件:在无向图中,奇度点为2,其余都为偶度点。端点有字典树处理即可。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 500010;int n, m;int fa[maxn];int ind[maxn];int outd[maxn];bool vis[maxn];int find(int x){ return x == fa[x]? x : fa[x] = ... 阅读全文
posted @ 2013-08-04 22:55 Buck Meister 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 大意略。关键在于怎样去建图,有冲突之间的点指点连边,然后通过染色的方法去找可行的一组解。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 2010;const int maxm = 1010*1010*9;struct Edge{ int v, w; int next;}edge[maxm], edge2[maxm];int first2[maxn];int cnt2;int fi... 阅读全文
posted @ 2013-08-04 15:13 Buck Meister 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 2-SAT问题,麻烦就麻烦再需要输出解具体见赵爽论文。可以判断有无解时,用一个映射,把与自己相对的“强联通分量”用hash映射出来,即hash[belong[i]] = belong[i+n]等等。这样在拓扑序染色时就比较方便了。#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 1010;const int maxm = 1010*1010;struct Edge{ int v, w; ... 阅读全文
posted @ 2013-08-04 09:37 Buck Meister 阅读(183) 评论(0) 推荐(0) 编辑
  2013年6月16日
摘要: POJ 2296与POJ 3678建图有一个地方要注意,即类似 a && b == 1,则a和b都必须为1,那么需要添加两条边~a->a,~b->b。POJ 2296有一种情况是必须加边的,即:两个矩形的坐标差不超过边长时,只可能一种情况,就是一个在上,一个在下,那么就需用到上述的加边。POJ 2296:#include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <c 阅读全文
posted @ 2013-06-16 16:23 Buck Meister 阅读(231) 评论(0) 推荐(0) 编辑
  2013年6月8日
摘要: 大意:给定X、Y定圆,一次只能选一个,圆之间不能互相冲突,问:最大的满足条件的半径是多少?思路:二分半径,2-SAT判断是否满足条件。#include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <algorithm>#include <map>u 阅读全文
posted @ 2013-06-08 12:36 Buck Meister 阅读(150) 评论(0) 推荐(0) 编辑
  2013年5月28日
摘要: 大意略。思路:求得强连通缩点后,可知是DAG图的最小边覆盖,用二分匹配即可。#include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <algorithm>#include <map>using namespace std;const int 阅读全文
posted @ 2013-05-28 10:42 Buck Meister 阅读(133) 评论(0) 推荐(0) 编辑