摘要: 枚举建图.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 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 我%&&……&()&%????? 双模hashWA,unsigned long longAC,而且必须判断hash出来的数不能为0???? 我可能学了假的hash 这个题求个前缀和,然后目标是找到距离当前位置最远,且能使这两个数组差分后2—k位相同 hash把差分后数组的2到k位压起来即可,用map 阅读全文
posted @ 2018-05-09 19:37 lokiii 阅读(164) 评论(0) 推荐(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 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 满脑子组合数学,根本没想到dp 设f[i][j]为前i只蚂蚁,选出j只的方案数,初始状态为f[0][0]=1 转移为 $$ f[i][j]=\sum_{k=0}^{a[i]}f[i 1][j k] $$ $$ f[i][j]=\sum_{k=max(j a[i],0)}^{j}f[i 1][k] $ 阅读全文
posted @ 2018-05-09 17:26 lokiii 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 按左端点排序,贪心的选即可 cpp include include include using namespace std; const int N=10005; int n,l,p,ans; struct qwe { int x,y; }a[N]; bool cmp(const qwe &a,co 阅读全文
posted @ 2018-05-09 16:10 lokiii 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 二分答案,贪心判定 阅读全文
posted @ 2018-05-09 15:40 lokiii 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 用单调递减的栈从后往前扫一遍即可 cpp include include using namespace std; const int N=1000005; int n,s[N],top,a[N],ans[N]; int read() { int r=0,f=1; char p=getchar(); 阅读全文
posted @ 2018-05-09 15:01 lokiii 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 裸的区间dp,设f[i][j]为区间(i,j)的答案,转移是f[i][j]=max(f[i+1][j]+a[i]\(n j+i),f[i][j 1]+a[j]\ (n j+i)); cpp include include using namespace std; const int N=2005; 阅读全文
posted @ 2018-05-09 14:50 lokiii 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 首先来分析一下,这是一张无向图,要求没有两条路联通的点对个数 有两条路连通,无向图,也就是说,问题转化为不在一个点双连通分量里的点对个数 tarjan即可,和求scc还不太一样…… cpp include include using namespace std; const int N=5005; 阅读全文
posted @ 2018-05-09 14:40 lokiii 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 居然要用高精度! 懒得operator了,转移是裸的完全背包 cpp include include using namespace std; int n,k,f[1005][45]; int read() { int r=0,f=1; char p=getchar(); while(p '9'|| 阅读全文
posted @ 2018-05-09 11:56 lokiii 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 这个和bzoj同名题不一样,有多个匹配串 但是思路是一样的,写个AC自动机,同样是开两个栈,一个存字符,一个存当前点在trie树上的位置,然后如果到了某个匹配串的末尾,则弹栈 cpp include include include include using namespace std; const 阅读全文
posted @ 2018-05-09 11:46 lokiii 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 好久没写kmp都不会写了…… 开两个栈,s存当前串,c存匹配位置 用t串在栈s上匹配,栈每次入栈一个原串字符,用t串匹配一下,如果栈s末尾匹配了t则弹栈 cpp include include include using namespace std; const int N=1000005; int 阅读全文
posted @ 2018-05-09 10:49 lokiii 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 参考:https://blog.csdn.net/mars_ch/article/details/53011234 我背包真是好不熟练啊…… 第一天买了第三天卖相当于第一天买了第二天卖第二天再买第三天再卖。所以问题转化成完全背包,每天转移即可 cpp include include include 阅读全文
posted @ 2018-05-09 09:13 lokiii 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 洛谷的数据毒啊 把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可 cpp include include include using namespace std; const int N=105,inf=1e9,dx[]={ 1,1,0,0},dy[]={0,0 阅读全文
posted @ 2018-05-09 08:24 lokiii 阅读(111) 评论(0) 推荐(0) 编辑