摘要:
POJ_3133 这个题目可以用插头dp处理,在dp的过程中可以将2、3相连的连通分量置为特定的数,其他的处理方式和普通的插头dp类似,只不过由于多了两类独立插头要多讨论一些情况。#include<stdio.h>#include<string.h>#include<algorithm>#define HASH 41941 #define SIZE 100010#define MAXN 15struct HashMap{ int head[HASH], size, next[SIZE], st[SIZE], f[SIZE]; void init() { me 阅读全文
摘要:
ZOJ_3256 这个题目在我最早学插头dp的时候就开始折磨我了,当时没能拿下这个题,主要是当时有两点没弄懂:①对于表示一个图的邻接矩阵的n次方,其中(i,j)位置的元素表示点i经n步到达点j的方案数;②一开始学插头dp就都是逐格进行dp的,而这个要先逐列dp,待拓展出所有可能的列的状态后再进行矩阵乘法,所以顿时不知道怎么做了。 其实在逐列dp的时候可以先2^n枚举出当前列中每个位置有无右插头,同时再考虑上左边前一列右插头的状态(这里的状态是指:有无插头,以及是哪个连通块的插头),然后自上向下扫一遍,由于相邻的两个插头(两个插头可能都是前一列的,可能都是当前列的,也可能各一个)必然要形成通路( 阅读全文