摘要: 正反加边分别跑spfa最短路,把两次最短路的和求个max就是答案 cpp include include include include using namespace std; const int N=2005,M=200005; int n,m,s,x[M],y[M],z[M],h[N],cnt 阅读全文
posted @ 2018-04-27 22:01 lokiii 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 最长上升子序列。虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j] include using namespace std; const int N=5005; int n,a[N],f[N],ans; int read() { int r=0,f=1; 阅读全文
posted @ 2018-04-27 21:26 lokiii 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 有趣 每条边在算答案的时候被算了二倍的边权值加上两个端点的权值,然后睡觉点额外加一次 所以可以用这个权做MST,然后加上点权最小的点 cpp include include include using namespace std; const int N=100005; int n,m,a[N],f 阅读全文
posted @ 2018-04-27 18:12 lokiii 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 先按照时间顺序加,价值塞进小根堆里,碰到不合法情况就从堆里减去 阅读全文
posted @ 2018-04-27 17:46 lokiii 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 模拟就行……讲道理这个时间复杂度为啥是对的??? cpp include include using namespace std; int k,n; int dfs(int v) { if(v 阅读全文
posted @ 2018-04-27 16:57 lokiii 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 好像是完全背包吧分不清了…… 好像是把数组二维压一维的时候,01背包倒序,完全背包正序 cpp include include using namespace std; const int N=105,H=55005; int n,h,p[N],c[N],f[H]; int main() { sca 阅读全文
posted @ 2018-04-27 16:29 lokiii 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1 include include using namespace std; int n,m,p[20],a[20]; long long f[20][1m) f[k][p[k]|i]+=f[j][i]; for(int i= 阅读全文
posted @ 2018-04-27 16:10 lokiii 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 如果反着看,看成合并木板,就和合并果子一样了,把若干块放进一个小根堆,然后每次取出两个合并,把合并结果加进答案和堆里 代码里小根堆用优先队列实现(懒 阅读全文
posted @ 2018-04-27 15:47 lokiii 阅读(143) 评论(0) 推荐(0) 编辑
摘要: t记录每个格子最早被砸的时间,bfs(x,y,t)表示当前状态为(x,y)格子,时间为t。因为bfs,所以先搜到的t一定小于后搜到的,所以一个格子搜一次就行 cpp include include include using namespace std; const int N=505,inf=1e 阅读全文
posted @ 2018-04-27 15:36 lokiii 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 先把已有的边并查集了,然后MST即可 记得开double cpp include include include include using namespace std; const int N=1005; int n,m,f[N],con,tot; double x[N],y[N],ans; st 阅读全文
posted @ 2018-04-27 14:37 lokiii 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 写了个bfs发现MLE了... 设f[t][i][j]为在t时刻走到(i,j)的方案数,转移和bfs一样 cpp include include using namespace std; const int N=105,dx[]={1, 1,0,0},dy[]={0,0, 1,1}; int n,m 阅读全文
posted @ 2018-04-27 14:06 lokiii 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 模拟 阅读全文
posted @ 2018-04-27 11:25 lokiii 阅读(147) 评论(0) 推荐(0) 编辑
摘要: ……我为什么要写这种题解…… 枚举投掷情况即可 阅读全文
posted @ 2018-04-27 11:20 lokiii 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 一棵树,碰到改变转向的边就异或一下,从1dfs一遍 cpp include include using namespace std; const int N=1005; int n,h[N],cnt,v[N]; struct qwe { int ne,to,va; }e[N'9'||p='0'&&p 阅读全文
posted @ 2018-04-27 11:12 lokiii 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 从叶子往上先拓扑一下,建立虚拟root,从root开始dfs。注意到每个点的最优取值一定是一个区间(中位数区间),从儿子区间推出父亲区间即可 cpp include include include include using namespace std; const int N=500005; in 阅读全文
posted @ 2018-04-27 10:58 lokiii 阅读(171) 评论(0) 推荐(0) 编辑