摘要:
直接bfs即可,注意开double,还有驱动和终点的齿轮都在序列里,要把它们找出来= = cpp include include include include using namespace std; const int N=1505; int n,sx,sy,s,t,q[N],fr[N]; bo 阅读全文
摘要:
A\ K短路模板,详见https://blog.csdn.net/z_mendez/article/details/47057461 算法流程: 把有向图全建成反向边,跑一遍所有点到t的最短路记为dis; A\ ,估价函数:g(已走过价值)是已走过的路长度,h(到终点价值估计)是到目的地的最短路,建 阅读全文
摘要:
设f[i]为i时刻最小花费 把牛按l升序排列,每头牛能用f[l[i] 1]+c[i]更新(l[i],r[i])的区间min,所以用线段树维护f,用排完序的每头牛来更新,最后查询E点即可 cpp include include include using namespace std; const in 阅读全文
摘要:
参考:http://hzwer.com/3917.html 好神啊 注意到如果分成n段,那么答案为n,所以每一段最大值为\\( \sqrt{n} \\) 先把相邻并且值相等的弃掉 设f[i]为到i的最小答案,b[j]表示的是从b[j]+1开始到i共有j个不同的数字,p[a[i]]表示a[i]上次出现 阅读全文
摘要:
不是严格小于是小于等于啊!!!!!不是严格小于是小于等于啊!!!!!不是严格小于是小于等于啊!!!!! 是我看不懂人话还是翻译不说人话= = 把所有格子按值排个序,bfs扩展打标记即可 cpp include include include include using namespace std; 阅读全文
摘要:
至今都不知道置换群是个什么东西……题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html cpp include include include using namespace std; const int N=10005; int n,w[N],a[N 阅读全文
摘要:
对这个奇形怪状的图tarjan,然后重新连边把图变成DAG,然后记忆化搜索即可 cpp include include using namespace std; const int N=100005; int n,a[N],h[N],cnt,dfn[N],low[N],tot,s[N],top,bl 阅读全文
摘要:
从小到大排个序,然后能选就选 阅读全文
摘要:
s[i]为差分后的“i这头牛前有几头比它高”,计算答案的时候加成前缀和,假设第一头最高减一下即可 用map记录一下被加过的区间,避免重复 cpp include include include include using namespace std; const int N=10005; int n 阅读全文
摘要:
c[x][y]为从(x,y)到(n,m)的最大值,记忆化一下 有个剪枝是因为y只能+1所以当n x m y时就算x也一直+1也是走不到(n,m)的,直接返回0即可 cpp include include using namespace std; const int N=105,dx[]={ 1,0, 阅读全文
摘要:
二分答案,把边权小于mid的边的两端点都并起来,看最后是否只剩一个联通块 阅读全文
摘要:
参考:https://www.cnblogs.com/N C Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算…… 贪心是错的,对拍出好多异常情况 s[i]为前缀和,从顶向下dp;设f[i]为本层宽度,g[i]为这 阅读全文
摘要:
参考:http://hzwer.com/4361.html 坐标开long long,inf开大点 先曼哈顿转切比雪夫(x+y,x y),距离就变成了max(x',y'); 先按x排序,维护两个指针,指针内区间的x差总是 include include include using namespace 阅读全文