自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KGV093的博客

Revelations and heartaches, make you realize.

  • 博客(27)
  • 收藏
  • 关注

原创 Codeforces 622C Not Equal on a Segment(思维)

传送门题意:给一个长度为n的数组a,每次询问区间内是否存在和不同的数,如果存在则输出一个下标,否则输出-1。题解:想了想似乎在线/离线都不是很好搞,看了一眼题解也是绝了。记一个表示从第i位往右第一个与i不同的数。每次询问如果则直接输出,否则根据和的大小关系输出或者-1。复杂度为。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using names

2020-07-24 18:28:27 283

原创 hdu 6769 In Search of Gold(二分答案+树形dp)

传送门题意:给一棵n个点的树,每条边的有两个边权和,现将某m条边的长度设为对应的,剩下n-m-1条边的长度设为。问得到的树的直径最小为多少。。题解:二分一个mid,check能否使这棵树的直径不大于mid。每次check时,由于k不大,可以用二维的树形dp来搞,定义表示p为根的子树内让i条边选a且保证子树内最长简单路径不超过mid时,子树内离p最远的点与p的距离最小值(有点绕,通过合理选择a来使这个距离尽量短)。最后如果,就说明当前mid可行。从儿子v往当前点p转移的时候,一开始设为0,每转移一

2020-07-24 16:13:21 651 2

原创 基于Keras的人工神经网络(ANN)实现Fashion-MNIST分类模型

仿照TensorFlow官方教程中的Basic classification: Classify images of clothing,自己写一遍最朴素的人工神经网络来实现Fashion_MNIST分类模型。Coursera上学了快两个月理论终于有了个稍微像样的实操......import tensorflow as tffrom tensorflow import kerasimport numpy as npimport matplotlib.pyplot as pltfashi

2020-07-21 18:30:20 2208 6

原创 Codeforces 1373D Maximum Sum on Even Positions(线性dp)

传送门题意:给一个数组,问最多选一个子数组reverse一次之后最大的偶数位元素之和为多少。题解:选一个长度为奇数的子数组reverse不改变答案。所以考虑reverse一个长度为偶数的子数组。大致乱搞思想:默认取偶数位时,选某一段区间连续取奇数位,最大和位多少,以及默认取奇数位时,选某一段连续取偶数位的最大和。#include<cstdio>#include<cstring>#include<iostream>#include<algorith

2020-07-20 15:47:33 324

原创 Codeforces 580D Kefa and Dishes(状压dp)

传送门题意:有n道菜,要求按一定顺序吃m道,第i道菜吃了能获得的满意度,又有k条加成,第i条表示如果吃完第道后马上吃道可以获得的满意度。问合理安排可以获得的最大满意度为多少。题解:看数据范围盲猜搜索或者状压,一开始想着这最大可以达到,这状态数量肯定承受不了......后来发现对于某个二进制状态,对之后有影响的只有最后一道菜,所以记表示在st这个二进制状态下下,吃过的最后一道菜为i,能获得的最大满意度。从子状态转移时也要枚举一下子状态最后一道菜,复杂度为。#include<cstdio&g

2020-07-20 14:46:26 323

原创 Codeforces 979C Kuro and Walking Route(LCA)

传送门题意:给一棵n个点的树,给定。问有多少点对满足从沿最短路径从u走到v,不会先经过x再经过y。题解:根据x和y是否在一条链上判断一下,两种情况用子树大小算一下就行。x和y在一条链上等价于,所以求一下LCA来判断。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;

2020-07-17 17:48:52 459

原创 Codeforces 1156D 0-1-Tree(并查集)

传送门题意:给一棵n个点,边被黑白染色的树,问有多少对点对满足从x沿最短路径走到y,经过白边(1-edges)后不经过黑边(0-edges)。题解:开两个并查集,第一个只连黑边,第二个只连白边,讨论三种路径:①黑②白③黑转白。前两种在并查集merge的时候可以计算,第三种路径怎么搞?对于某个点x,经过它的第三种路径有条。为什么这么不会算重,因为树是没有环的(脑补一下似乎没毛病)。做完发现可以不用讨论,直接。减去那个1就是去掉(pos, pos)这条路径。WA了好久发现应该find的地方写成了

2020-07-16 18:28:19 302

原创 Codeforces 1139C Edgy Trees(并查集)

传送门题意:给一棵n个点,边被红黑染色的树,给定m,有多少种选法,选出可重集满足从走到,再从走到,......,再从走到(都走最短路径),至少经过一条黑边。题解:由于是最少经过一条黑边,直接算不好算,所以正难则反尝试算有多少种选法使得走下来只经过红边。显然这样选必须在某个只含红边的极大连通子图里选。于是只用并查集连红边,每次合并计算一下贡献即可,类似Codeforces 1213G。记计算出的选法有种,那么。#include<cstdio>#include<cstring&

2020-07-15 17:57:08 335

原创 Codeforces 519E A and B and Lecture Rooms(LCA)

传送门题意:给一棵n个点的树,m次询问,第i次询问有多少点到和距离相等(所有边长均为1)。题解:每次询问考虑路径上的中点,分中点是/不是LCA两种情况讨论一下即可。本以为这种要讨论的咋也得调一小会儿,结果居然1A......再加上懒得画图,所以贴个Codeforces的链接捡懒。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using names

2020-07-15 17:08:41 352

原创 Codeforces 1213G Path Queries(并查集+离线)

传送门题意:给一棵n个点有边权的树,m次询问,第i次询问有多少点对的简单路径上最大边权不超过。题解:直接在一棵建好的树上搞貌似不太可行...好像点分治可以莽一下?于是尝试离线做法,把询问从小到大排序,每次把边权小于当前询问的边都连起来,算一下合并联通块造成的贡献即可。我居然不是那个写点分的莽子(偷笑)....#include<cstdio>#include<cstring>#include<iostream>#include<algorith

2020-07-14 18:31:11 213

原创 Codeforces 495B Modular Equations(简单数论)

传送门题意:求有多少个解(x)。题解:无法直接枚举。可以看出如果一个x使得等式成立,那么b-a一定是x的倍数,于是枚举一下b-a的因子check一下(是否比b大)即可。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int a,b;inline int read() { int x=0,f=1;char

2020-07-14 17:33:14 227

原创 hdu 3555 Bomb(数位dp)

传送门题意:问1~n的范围内有多少个数包含连续数位“49”。题解:数位dp,重点考虑哪些状态是可以直接记下来的。如果定义f[pos][pre]来表示搜到第pos位,上一位是pre时之后的填法,那么可以此时不能确定49是否出现过,所以会WA。如果定义f[pos][pre][found]表示搜到第pos位,上一位是pre,当前出现过49(found == true)或者没出现过的填法,那么记忆化效率不高,会T。因为如果出现过49,那之后填什么效果都一样,可以压成一个状态直接return。所以可以定义f[

2020-07-13 15:32:12 195

原创 Luogu 2657 [SCOI2009] windy 数(数位dp)(模板)

传送门题意:略题解:略,挂一个洛谷日报关于数位dp的介绍注意:此题记忆化搜索时数组不光要记录pos还要记录pre(上一位填的数),因为上一位填比如说1和2,对当前位的答案有影响(这一位可以填的数的个数不同)。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;in

2020-07-13 14:50:16 222

原创 Codeforces 734E Anton and Tree(并查集+树的直径)

传送门题意:给一棵黑白染色过的树,每次操作可以将一块连通的同色子图(连通块内不含另一颜色)染成另一颜色,问最小需要操作几次才能将树上所有节点统一为同一颜色。题解:先用并查集缩点,把同一颜色的连通的缩成一个点,得到新树,然后直径上的点数/2即可。(从直径中间那个点开始染色,把同色的区间不断往直径两端扩展,这个过程中非直径上的点的颜色也会被统一)脑洞还是不够大....树的直径又没看出来诶#include<cstdio>#include<cstring>#includ

2020-07-10 14:46:49 156

原创 Codeforces 763A Timofey and a tree(思维)

传送门题意:给一棵n个点的无根树,每个点有一个颜色,问是否存在一个点使得以它为根时,每棵子树内颜色相同。题解:第一反应树形dp,想了想好像没法搞......树上分块这些好像也不行。看了一眼题解...这个想法真的是...一针见血...如果所有点颜色相同那输出YES再随便输个点就好。如果有颜色不同的点对,那么找一条两个端点颜色不同的边,如果他们两个都不能作为合法的根,那么答案是NO(别的任何一点为根,这条边所在的子树不满足条件)。否则答案为YES。复杂度为级别,真是......不知道该说啥...刁钻

2020-07-09 18:12:03 240

原创 Codeforces 1201B Zero Array(思维)

传送门题意:给一个长度为n的非负数列,每次可以选两个数同时减1,问能否将整个数列的数全部归零。题解:第一波猜结论猜错了(只猜中第一个必要条件“所有数之和为偶数”,也考虑过如果只有两个数那么必须相等)。其实再多想一步就可以发现如果有多个数,那么最大的那个数在不能超过剩下的之和。超过了的话这个最大数无法归零。现在想想如何证明不超过就一定可以归零。假设最大数为a,次大数为b,剩余的数之和为sum,剩余的数中最大的为c(原数列第三大),我们先用a“消耗”b(同时使a,b减1)直到b==c(这一步一定可以

2020-07-08 17:37:09 226

原创 Codeforces 220B Little Elephant and Array(莫队)

传送门题意:给一个长度为n的数列,m次询问,第i次询问到区间内有多少个数的出现次数等于它自己。n, m<=1e5题解:由于询问可以离线,所以用莫队。注意要先离散化,否则再开个map复杂度会多一个log,会TLE。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<set>

2020-07-08 14:34:57 158

原创 Codeforces 827B High Load(构造)

传送门题意:构造一棵n个点,k个叶节点的树使得最远的两个叶节点的距离尽可能近。题解:由于叶节点个数的限制,可以先以1为根,用2到k+1这k个点与1连边,其他的点都塞到这k条边上。如何分配其他的点使最远的两个叶节点尽量近?尽量平均分就行,先往每条边上都加一个,有多的就再加一轮,直到所有点都在树上。正确性比较显然,也可以反证。#include<cstdio>#include<cstring>#include<iostream>#include<a

2020-07-07 18:01:31 209

原创 Codeforces 1092F Tree with Maximum Cost(树形dp)

传送门题意:给一棵n个点的无根树,每个点的权值为,每条边长度为1,选一个点使得最大,其中dist(i, v)表示i到v的简单路径的长度(n<=2e5)。题解:把n个点都算一次的复杂度为,所以先默认1为根(选为“v点”),然后考虑换根对答案的影响,从而两次dfs可以算出以每个点为v点的答案,在其中选一个最大的即可。适合中午昏昏欲睡的时候写的题......#include<cstdio>#include<cstring>#include<iostream

2020-07-06 14:29:45 308

原创 Codeforces 888E Maximum Subsequence(折半搜索)

传送门题意:在n个数里选m若干个使得它们之和mod m最大,n<=35题解:直接搜复杂度为会炸,所以尝试折半搜索,左右两边复杂度不超过,可以接受,搜出来的和记录在两个数组里,然后尝试凑出一个最大的。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const

2020-07-06 13:37:43 220

原创 AtCoder Beginner Contest 173 总结

感觉这次出题怪怪的......做了5道但是感觉很不爽C直接暴力枚举状态然后check,D是一道蜜汁贪心,现在也不知道咋证明,E差不多就模板题,一个点被卡了精度还调了好久......F考了一点逆向思维?直接算不好算所以先算一开始一条边都没有的时候答案是多少,然后考虑每加一条边答案会减去多少,看起来像树形dp的一道题不到10行就弄完了......虽然确实挺巧的,但感觉AtCoder出题日渐趋向脑筋急转弯?A#include<cstdio>#include<cstrin.

2020-07-06 10:37:28 407

原创 Codeforces 721C Journey(DAG上dp)

传送门题意:n个点m条边的有向无环图,每走一条边消耗一定时间,问从1走到n,消耗时间不超过T的情况下最多经过多少个点题解:由于n,m范围不大所以对于这个DAG可以做的dp,定义f[i][j]表示走到i点,经过了j个点消耗时间的最小值,顺便开个pre数组记录一下转移路径。说一下坑点,首先这个题卡空间,边权和f数组都不能是longlong。而且1不一定是DAG入度为0的点,也就是说1不一定能走到所有点。所以要先将1不能走到的点的出边贡献给别的点的入度减掉,否则拓扑排序时有可能有些点入度始终无法为0导

2020-07-03 18:36:18 203

原创 Codeforces 1132F Clear the String(区间dp)

传送门题意:给一个长度不超过500的字符串,每次可以消掉字符串中连续相同的一个子串,消去之后剩下的两个串自动连在一起,问最少消多少次使字符串清空。题解:区间dp,一看应该使的但是第一把居然写出来个的。过了样例交上去果然WA了,原因是没有考虑最优解是讲原串分成若干子串的情况。所以转移时需要引入断点k,从而复杂度多一个n。比如6adabcb就可以卡掉这个会WA的算法(正解在后面)#include<cstdio>#include<cstring>#incl

2020-07-03 17:02:13 223

原创 Codeforces 1101D GCD Counting(点分治)

传送门题意:给一棵n个点的数以及n个点的点权,一条路径(x,y)合法当且仅当从x到y的路径上所有点权的gcd大于1(一条路径也可以是一个点),问所有合法路径经过的点的数量最大的经过了多少点。题解:就是求最长的合法路径再+1。这种在树上询问路径的可以优先考虑点分治。每次分治到一个重心,把每条链的链上gcd分解质因数,去和之前这些质因数对应的最大链长加起来再+1,然后这些质因数对应的最大链长都更新一下。注意每次先把一棵子树中的链记下来,先询问再更新(避免同一棵子树内的两条链更新答案)。还是要注意先加

2020-07-03 15:09:08 258

原创 Codeforces 1093D Beautiful Graph(二分图染色+组合数学)

传送门发这篇只是为了记录一个容易TLE的坑点:对于这种多组数据,所有数据n之和不超过3e5的题,初始化的时候要for 1 to n,而不能memset,否则比如30000组数据每组n为10,那么如果memset进行30000次的复杂度就会炸......#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typede

2020-07-02 12:24:34 246

原创 Codeforces 1209D Cow and Snacks(并查集)

传送门题意:有n个点心,m个客人,每个客人有两个喜欢的点心,现需要给客人安排一定顺序,每轮到一个人,他吃掉所有剩下的他喜欢的点心(有一个吃一个,有俩吃俩)。一个都吃不到的人就会伤心。请问合理安排后最小的伤心人数是多少。题解:我们需要尽可能平均分配,就让每个人尽可能只吃一个(可以理解为重复利用一些点心?A吃了1,2,B吃了2,3相当于2利用了两次)。于是灵光乍现想到把每个客人看成一条边然后跑个最长路之类的东西?后来细想一下发现不对,如果这么建图,一个人会伤心当且仅当这条边两端已经被连通过,所以应该用并

2020-07-02 11:16:30 209

原创 Codeforces 1295D Same GCDs(欧拉函数)

传送门题意:给定,若,求有多少个x满足题解:如果满足gcd相同则x必须为gcd(a,m)的倍数,设,则若,有多个w满足。因为d是最大公因数所以。到这里(凭借丰富的骗分经验?)就可以直接猜一波答案是phi(v)了。所以求个gcd再求个欧拉函数就完事儿。一开始欧拉函数没写好还T了一发......这次真的是自己把答案猜对的(*—*)下面证明一下答案:相当于要证正整数序列上每个长度为v的周期内与v互质的数的个数相等并且它们的分布是和第一个周期[1, v]是相同的。即证,然后充分性和必要性都反证一下就

2020-07-01 18:38:32 268

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除