摘要: 这个其实就是在说明相邻的点不能取,我们发现只要其满足这个条件他总能走出来,那么我们就最小割就是了,我们先黑白染色,S 一排黑点 一排白点 T 对于相邻的点我们就直接中间连INF,于是就满足只要一个点选了,另一个点就不能选,我们跑完最小割就得到了满足相邻的点要么都选要么只选一方的最下舍弃。 阅读全文
posted @ 2017-08-05 08:43 TS_Hugh 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 我们感性可证离散(不离散没法做),于是我们就有了状态转移的思路(我们只考虑单不减另一个同理),f[i][j]到了第i块高度为j的最小话费,于是我们就可以发现f[i][j]=Min(f[i-1][k])+|a[i]-j|(k<=j),于是我们的思路就去了各种数据结构…….然后我们发现对于这些转移就是在 阅读全文
posted @ 2017-08-05 08:40 TS_Hugh 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 这道题我们经过简单的推测便可得知3个之前特判,四个之后就成为了一般状况,就是我们每侧都是走整个整个的|_|之后零的走|||。 考试的时候包括平时做题,许多正确的感性比理性证明要强得多。 阅读全文
posted @ 2017-08-05 08:37 TS_Hugh 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 这是一种最小割模型,就是对称三角,中间双向边,我们必须满足其最小割就是满足题目条件的互斥关系的最小舍弃,在这道题里面我们S表示文T表示理,中间一排点是每个人,每个人向两边连其选文或者选理的价值,中间每两个点之间连他们的高兴度,然后我们就要分析,并作出改变,对于任意两个点我们要么割一个z要么两边某一边 阅读全文
posted @ 2017-08-05 08:35 TS_Hugh 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 第一步我们发现对于每一个格子,我们只有翻和不翻两种状态,我们发现一旦确定了第一行操作,那么第二行的操作也就随之确定了,因为第一行操作之后我们要想得到答案就得把第一行全部为0,那么第二行的每一个格子的操作都会对应于其上的格子的改变,而且也只有第二行能救他了。因此我们只要知道第一行的操作其他的就全都可以 阅读全文
posted @ 2017-08-05 08:33 TS_Hugh 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这道题的内存…………………真·精神污染……….. 这道题的思路很明了,我们就是要找每一个路径包含了多少其他路径那么就是找,有多少路径的左右端点都在这条路径上,对于每一条路径,我们随便选定一个端点作为第一关键字,另一个作为第二关键字,于是就有了两维限制,按照主席树的一般思路,我们把建树顺序作为一维,然 阅读全文
posted @ 2017-08-05 08:31 TS_Hugh 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 我们直接按父子关系建主席树,然后记录倍增方便以后求LCA,同时用并查集维护根节点,而且还要记录根节点对应的size,用来对其启发式合并,然后每当我们合并的时候我们都要暴力拆小的一部分重复以上部分,总时间复杂度为O(n*log),因为每个的节点只会作为小的部分合并,因此他所在的一小部分至少变大2倍,对 阅读全文
posted @ 2017-08-05 07:24 TS_Hugh 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 板子题,只是记得负数加fix最方便 #include <cstdio> const int A=19,N=100010; namespace FIFO { char ch,B[1<<20],*S=B,*T=B; #define getc() (S==T&&(T=(S=B)+fread(B,1,1<< 阅读全文
posted @ 2017-08-05 07:06 TS_Hugh 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 受惯性思维的影响自动把二进制状态认为是连与不连......... 我们这里二进制状态表示的是奇偶,这样的话我们f[i][j][k]表示的就是前i个城市用了j个边他前k个城市的奇偶状态,然后想想怎么转移,我们要是深搜就会从一开始一直搜每搜到一个最终状态就是一个答案,然后状态转移同理,我们f[1][0] 阅读全文
posted @ 2017-08-05 06:27 TS_Hugh 阅读(204) 评论(0) 推荐(0) 编辑