bzoj5138 [Usaco2017 Dec]Push a Box】的更多相关文章

题目描述: bz luogu 题解: 暴力可以记录$AB$位置转移,这个时候状态是$n^4$的,无法接受. 考虑只记录$A$在$B$旁边时的状态,这个时候状态时$n^2$的. 所以说转移有两种,一种是$A$推$B$一下,另一种是$A$绕到$B$另一侧. 第一种转移显然$O(1)$,瓶颈在第二种. 发现这对点满足点双,所以建出广义圆方树,判两个点是否同父亲或一个点是另一个点的爷爷. 时间复杂度$O(n^2)$. 代码: #include<queue> #include<cstdio>…
[BZOJ5138][Usaco2017 Dec]Push a Box(强连通分量) 题面 BZOJ 洛谷 题解 这题是今天看到萝卜在做然后他一眼秒了,我太菜了不会做,所以就来做做. 首先看完题目,是不是有点像\(NOIP\)的那道华容道? 所以类似的考虑状态\(f[x][y][d]\),表示当前箱子在\((x,y)\)位置,人在\(d\)(上下左右中的一个)方向时是否存在.那么这样子的状态数是\(4nm\)个,显然是可以的.考虑转移的话就是人推箱子了,沿着某个方向直接推是很容易的,现在的问题是…
5142: [Usaco2017 Dec]Haybale Feast Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 182  Solved: 131[Submit][Status][Discuss] Description Farmer John is preparing a delicious meal for his cows! In his barn, he has NN haybales (1≤N≤100,0 00). The iith…
传送门 一个人推箱子,和之前的华容道中的棋子移动有异曲同工之妙,因为每次可以让人走到箱子的其他方向上,或者推一下箱子 所以状态可以设成\(f_{i,j,k}\),即箱子在\((i,j)\),人在\(k\)方向的状态是否存在,一开始也要把人移到箱子旁边作为初始状态,然后每次移动人到箱子其他方位或者推箱子 难点是如何快速判断人是否可以从一个方位移到另一个方位上去.如果可以,说明至少存在一条不经过箱子的路径使得这两个方位联通,那么这两个位置也就是在同一个点双连通分量里面,\(tarjan\)即可 然后…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5140 [算法] 最短路 时间复杂度 : O(N^2) [代码] #include<bits/stdc++.h> using namespace std; ; struct info { int x , y , id; } a[MAXN << ] , b[MAXN << ]; int n , d; ]; vector< ]; queue< int…
https://www.zybuluo.com/ysner/note/1293166 题面 戳我 解析 挺不错的一道图论码量题. 可以借此回顾一下\(noip2013\)华容道. 思路和华容道差不多. 照洛谷数据规模看,暴搜可能有\(\frac{1}{3}\)的分数... 设\(f[w][i][j]\)表示箱子在点\((i,j)\)时,人能否到达\(w\)方向(即\(0/1/2/3\),表示上下左右). 那么我们可以先从人出发\(BFS\)一遍,预处理出未推箱子时的\(f[w][i][j]\).…
(貌似有圆方树的做法,我写的是点双) 显然这道题就是直接搜索.定义状态为f[i][j][0~4]表示箱子在(i,j),人在某个方向推.然后问题就是怎么转向.我们发现如果要转向,必须是人走过一条不包括(i,j)的路径到另一个方向.那么直接求一个点双联通分量就完事了.把点双联通里面的点两两之间都有至少两条不经过重复点的路径,这样就能转向了. 点双内,具体的处理方法是开一个桶. 具体见代码 CODE #include <bits/stdc++.h> using namespace std; cons…
Description Farmer John is preparing a delicious meal for his cows! In his barn, he has NN haybales (1≤N≤100,0 00). The iith haybale has a certain flavor Fi (1≤Fi≤10^9) and a certain spiciness Si(1≤Si≤10^9). The meal will consist of a single course,…
Description Farmer John's nemesis, Farmer Nhoj, has NN cows (1≤N≤10^5), conveniently numbered 1…N. They have  unexpectedly turned up at Farmer John's farm, so the unfailingly polite Farmer John is attempting to  give them gifts.To this end, Farmer Jo…
看了半天题 不知道怎么用SAM维护 于是借(chao)鉴(xi)的一发神犇的 只要判断这个子串之前被标记的记号(也就是他属于第几个串)和这次转移到的是否相同 如果不同就说明该子串属于多个串 直接标记-1 依次转移就好咧 最后统计就是ans[f[i]]+=sam[i].mx−sam[par[i]].mx;f[i]就是他属于那个串 #include<bits/stdc++.h> #define bug(x) cout<<(#x)<<" "<<…