摘要: 裸的最大生成树,注意判不连通情况 cpp include include include using namespace std; const int N=20005; int n,m,f[N],con; long long ans; struct qwe { int u,v,w; }a[N]; b阅读全文
posted @ 2018-06-16 22:07 lokiii 阅读(1) 评论(0) 编辑
摘要: 差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到“奶牛排在队伍中的顺序和它们的编号是相同的”,所以\\( d_i d_{i 1} =0 \\),连(i,i 1,0);然后对于\\( d_i d_j=D d_j d_i include include inc阅读全文
posted @ 2018-06-16 21:55 lokiii 阅读(2) 评论(0) 编辑
摘要: 很像贪心的dp啊 这个定金尾款的设定让我想起了lolita和jk制服的尾款地狱…… 设f[i][j]为从j到i的付定金的最早月份然后从f[k][j 1]转移来,两种转移f[i][j]=min(f[i][j],f[j 1][k]+1)是当前这个月付[k 1,j 1]的尾款和[j,i]的定金,f[i][阅读全文
posted @ 2018-06-16 10:35 lokiii 阅读(0) 评论(0) 编辑
摘要: 枚举分母,然后离他最近的分子只有两个,分别判断一下能不能用来更新答案即可 cpp include include include using namespace std; int a,b,aa,ab; double mx=10; void wk(int x,int y) { if(x b==y a)阅读全文
posted @ 2018-06-09 14:17 lokiii 阅读(6) 评论(0) 编辑
摘要: 就是区间dp啦f[i][j]表示以i开头的长为j+1的一段的答案,转移是f[i][j]=s[i+l] s[i 1]+min(f[i][j 1],f[i+1][j 1]),初始是f[i][1]=a[i] 于是可以把j维推掉 cpp include include using namespace std阅读全文
posted @ 2018-06-08 17:25 lokiii 阅读(3) 评论(0) 编辑
摘要: 本来是冲着搜索去的……其实可以贪心 因为能改变第一位的只有第一位和第二位,然后改完之后后面的同理,也就是说只要贪心的推一遍就可以 但是注意要在翻第一个和不翻第一个之间取个min cpp include include include using namespace std; const int N=阅读全文
posted @ 2018-06-07 16:11 lokiii 阅读(3) 评论(0) 编辑
摘要: 欸我一直以为双向bfs是搜完一半再搜另一半呢,妹想到是两个一起搜 然后队列里放的结构体里不能直接存答案,所以做一个邻接表一样的东西,直接指向需要的字符即可 记录状态用康托展开来hash 以及居然是多组数据啊?! cpp include include include include using na阅读全文
posted @ 2018-06-06 18:46 lokiii 阅读(3) 评论(0) 编辑
摘要: A. Infinity Gauntlet 模拟就行了(不过这个题面啊……) cpp include include include include using namespace std; int n; string s[10]; maphas; mapv; int main() { has["pu阅读全文
posted @ 2018-06-02 14:36 lokiii 阅读(18) 评论(0) 编辑
摘要: A. Antipalindrome 还以为是什么神dp结果就是分情况讨论啊 原串是一串一样的字符的话输出0,是回文串的话输出n 1,否则直接输出原串长度 cpp include include using namespace std; const int N=200005; int n,d[N],s阅读全文
posted @ 2018-06-02 14:22 lokiii 阅读(6) 评论(0) 编辑
摘要: 就是套路咯,设s[i]为1+2+...i 首先列出dp方程\\( f[i]=min(f[j]+a[i]+(i j) i (s[i] s[j])) \\) 然后推一推 $$ f[i]=f[j]+a[i]+(i j) i (s[i] s[j]) $$ $$ f[i]=f[j]+a[i]+i i i j 阅读全文
posted @ 2018-05-31 11:33 lokiii 阅读(4) 评论(0) 编辑
摘要: 这个可以用异或高斯消元,但是~~我不会呀~~我用的暴搜 2的m次方枚举第一行的翻转情况,然后后面的就定了,因为对于一个j位置,如果i 1的j位置需要翻,那么一定要翻i的j,因为这是i 1的j最后翻的机会 按字典序搜索然后取次数min即可 cpp include include include inc阅读全文
posted @ 2018-05-26 22:29 lokiii 阅读(4) 评论(0) 编辑
摘要: 我会斜率优化了!这篇讲的超级棒https://blog.csdn.net/shiyongyang/article/details/78299894?readlog 首先列个n方递推,设sf是f的前缀和,st是t的前缀和:\\( f[i]=min(f[j]+s\ (sf[n] sf[j])+st[i]阅读全文
posted @ 2018-05-26 11:55 lokiii 阅读(10) 评论(0) 编辑
摘要: 最大流生动形象的板子,注意数组开大点 cpp include include include include using namespace std; const int N=100,inf=1e9; int n=26,m,h[N],cnt=1,s=1,t=26,le[N],x; char s1[5阅读全文
posted @ 2018-05-25 18:25 lokiii 阅读(5) 评论(0) 编辑
摘要: 首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间 然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是否需要翻转即可 cpp include include include using namespac阅读全文
posted @ 2018-05-25 18:09 lokiii 阅读(3) 评论(0) 编辑
摘要: 算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v] (1 p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可(记得输出大难的时候除以总概率和) cpp include include using namespa阅读全文
posted @ 2018-05-25 17:09 lokiii 阅读(6) 评论(0) 编辑
摘要: 其实是可以斜率优化的但是没啥必要 设st为花费时间的前缀和,sf为Fi的前缀和,f[i]为分组到i的最小花费 然后枚举j转移,考虑每次转移都是把j到i分为一组这样意味着j及之后的都要增加s的时间,同时增加这段的结束时间/ F,取min即可 cpp include include using name阅读全文
posted @ 2018-05-25 14:45 lokiii 阅读(6) 评论(0) 编辑
摘要: noip2017 230分 二等奖 HEOI2018 115分 没有队 APIO 2018 92分 ag阅读全文
posted @ 2018-05-17 18:54 lokiii 阅读(10) 评论(0) 编辑
摘要: 枚举建图.jpg 一开始建的图挂了,于是枚举了几种建图方式…… 因为要删点,所以拆点,连接(i,i',1),对于原来图上的边(u,v),连接(u',v,inf),(v',u,inf),然后连接(s,i',inf),对于不能和1相连的点x,建边(x,t,inf) 跑dinic即可 原因的话,~~枚举出阅读全文
posted @ 2018-05-09 21:18 lokiii 阅读(7) 评论(0) 编辑
摘要: 我%&&……&()&%????? 双模hashWA,unsigned long longAC,而且必须判断hash出来的数不能为0???? 我可能学了假的hash 这个题求个前缀和,然后目标是找到距离当前位置最远,且能使这两个数组差分后2—k位相同 hash把差分后数组的2到k位压起来即可,用map阅读全文
posted @ 2018-05-09 19:37 lokiii 阅读(10) 评论(0) 编辑
摘要: 几乎是板子,求有几个size 1的scc 直接tarjan即可 cpp include include include using namespace std; const int N=10005; int n,m,h[N],cnt,ans,tmp,dfn[N],low[N],s[N],top; b阅读全文
posted @ 2018-05-09 17:32 lokiii 阅读(6) 评论(0) 编辑