
图
BEconfidence
坚持才是胜利之道
展开
-
[超源点:还是最短路的变形]hdu2066
这个答案中队列用的for循环的形式还是挺好玩的 #include using namespace std; const int INF = 0x7fffffff; int T,S,D,L; const int MAXN = 1005; int graph[MAXN][MAXN]; int s[MAXN]; int d[MAXN]; int Dijkstra(int beg,int end){原创 2015-09-15 21:27:34 · 452 阅读 · 0 评论 -
[最大流法二分匹配]uva753
很巧妙的用数组存储c和f方便 #include using namespace std; const int MAXN = 310; const int INF = 0x3c3c3c3c; string str; map rs,dv; int mr[MAXN];//从源点到i的最小残量 int p[MAXN];//更新时i的上流节点 int c[MAXN][MAXN],f[MAXN][MAXN]原创 2015-09-15 23:55:20 · 451 阅读 · 0 评论 -
[二分网络流]uva12264
思路:把每个点拆成两个点,一个入度,一个出度,入度向自己的和每个相邻的点的出度连一条边,容量是ai,每个点出度连一条边到汇点,容量为1,那些与敌人相邻的点再多连一条边到汇点,容量是二分的值,我们只需要二分这个值,跑一下网络流,如果满流,表示可以,否则不行。 #include using namespace std; const int inf = 0x7f7f7f7f; const int ma原创 2015-09-22 14:59:48 · 726 阅读 · 0 评论 -
[二分图最大匹配=最小覆盖点]uva12549 Sentry Robots
#include using namespace std; const int maxn = 2500 + 10; const int N=100 +10; int X,Y; int g[maxn][maxn], linker[maxn]; bool vis[maxn]; int mapp[N][N],n,m; pair Map[N][N]; bool dfs(int u){ for(in原创 2015-09-21 22:03:39 · 648 阅读 · 0 评论 -
[枚举最小瓶颈生成树]UVa-1395 - Slim Span(kruskal)
就是紫书的思路,像暴力 #include using namespace std; const int MAXN = 105; const int INF = 0x3f3f3f3f; struct Edge{ int u,v,cost; bool operator < (const Edge& a)const { return cost > a.cost;原创 2015-09-23 22:55:41 · 420 阅读 · 0 评论 -
[最小生成树+二进制枚举]UVa1151 - Buy or Build
二进制枚举子集不太懂 用的还是例题的思路 #include using namespace std; const int maxn = 1005; struct point { int x,y; }pp[maxn]; struct edge{ int s,e,dist; }l[maxn*maxn]; int q,n,m; int p[maxn]; vector g[10]; i原创 2015-09-23 23:04:13 · 819 阅读 · 0 评论 -
[二进制位运算状态 隐式图搜索]UVa658 - It's not a Bug, it's a Feature!
用二进制表示状态运算起来更快一些,这样一行就可以用一个数字去表示其状态了。按这个思路继续想下去就是如何建图了,其实无论邻接表还是邻接矩阵貌似建完整图的时间复杂度都比较大,而且好多状态未必用的到,因而不如干脆不建完整图,每次都扫描一遍转换规则,如果可以生成另一个状态就将另一个状态直接入队即可。 ①判定某些位置是否为1,如判定2、4位置为1,则转化为判断x|0101是否等于x。原创 2015-09-23 23:22:39 · 557 阅读 · 0 评论 -
[hash 表达式树]UVa12219 - Common Subexpression Elimination
将每一个结点用一个三元组来表示,然后映射到map中以去重 。 其中三元组中有一个string , 我们可以用hash来处理这个string 。 因为string最大长度为4, 所以我们可以这样处理 : int hash = 0; hash = hash * 27 + s[i] - ‘0‘ + 1; 将hash每次乘以27 是因为字符串只有小写字母,这样做可以完美的去重 ,保原创 2015-09-23 23:43:26 · 689 阅读 · 0 评论 -
[最小割最大流]UVa1515 - Pool construction
建图: 1、设定源点S,和汇点T. 2、把周围的洞全部变为草,然后对于周围的每个草建立S到t容量为无穷大的边 3、对于其他的草,建立S到该点容量为d的边,对于洞建立该点到汇点容量为f的边 4、对于图中的每个点与它周围建立容量为b的双向边。 #include using namespace std; const int INF原创 2015-09-24 00:11:03 · 401 阅读 · 0 评论