Codeforces✍
Codeforces是全球最著名的在线评测系统之一,这里有高水平的选手,高质量的题目,高密度的比赛。该网站由俄罗斯的一个团体创立并负责运营。当然,该网站上大部分博客、评论、题面都是英语的。
一百个Chocolate
一个小帅哥和某厂前端搬砖。
频道内容: 前端技术,编程,我的思考。
用心去做自己热爱的事情️
座右铭: 学如逆水行舟,不进则退。
展开
-
Educational Codeforces Round 1, problem: (D) Igor In the Museum 【dfs】
题意给定一个nm的地图,有k次查询。每次查询,询问位置(x,y)的点连通块周围有多少个思路统计每个“.”周围“ * ”的数量,每次选取一个未被标记过的“.”开始往四周dfs,累加同一个连通块中每个“.”四周的“ * ”的数量作为该连通块的答案,并在dfs过程中给该连通块中点打上标记,这样查询的时候只需要查询该点所属连通块的答案即可code#include<bits/stdc++.h...原创 2020-02-06 20:34:59 · 513 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (F) Berland Beauty【dfs+贪心】
题意给你一个n个点的树,树有边权现在有m个限制条件,表示点u到点v路径上的最小值是w(注意是路径上的最小值,看了好久的题,比如1到3路径最小值是3 假如2到3为3,但是1到2可以为5 满足1到3路径最小值为3! ) 这句话理解清楚了这个题就不是很难了现在让我们构造这个树的边权,如果不能构造输出-1思路因为n只有5000,所以对于每一个限制条件,我们都在路径上保存一下这条边的最大边权,...原创 2020-02-06 17:31:12 · 2823 阅读 · 0 评论 -
【题解】Codeforces Round #617 (Div. 3) A、B、C、D、E、F
题目题解链接( A ) Array with Odd Sum 【math】点击进入A题解( B ) Food Buying 【math】点击进入B题解( C ) Yet Another Walking Robot【map记录坐标点】点击进入C题解( D ) Fight with Monsters 【贪心博弈】点击进入D题解( E1 ) Stri...原创 2020-02-06 11:23:44 · 455 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (C) Yet Another Walking Robot【map记录坐标点】
题意给一个字符串,每种字符都代表一个坐标变换,让求删除一个最短的子串(不为空)使得删除这个子串后最终坐标点位置不变,找到了输出子串的起始位置和结束位置,若找不出这样一个子串,那么输出-1,字符串下标从1~n。思路用map记录某个坐标点上一次出现的时间然后使用count函数判断是否存在当前这个位置如果这个位置之前来过了,那么就确定左右索引值,每次和一个中间值比较,然后取最小的那个就行了c...原创 2020-02-06 09:38:45 · 503 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (E2) String Coloring (hard version) 【贪心】
题意意思和E1一样 只不过可以用不同的颜色,要求用的颜色越少越好思路我们由E1知道 要两个非严格递增序列组成即可那么E2就是看序列能不能由ans个非严格递增序列组成 ans越小越好那么就一直找即可code#include<bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=200+5;...原创 2020-02-05 23:00:44 · 342 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (E1) String Coloring (easy version) 【贪心+排序】
题意让你给题中给定的字符串 的每个字符染色0或者1然后不同颜色的字符可以交换 问你是不是有一种染色方案 可以让给定的字符串进行任意次交换后是有序的思路因为只有两种颜色可以用来涂相同颜色彼此不能交换所以同一种颜色组成的序列绝对是非严格递增的所以只要看是不是能把序列分成两个非严格递增的序列即可详情看代码code#include<bits/stdc++.h>#defin...原创 2020-02-05 21:55:16 · 565 阅读 · 0 评论 -
Codeforces Round #385 (Div. 1), problem: (A) Hongcow Builds A Nation 【dfs】
题意在一个星球上,有n个点,m条边,其中有k个点是不同国家的政府。 要求结点没有到自己的边,任意两个结点间只存在一条边,任意两个政府点之间不存在路径。 问满足上面三个条件下,最多往图中添加几条边。思路先利用已给的边求出每个政府树的顶点数(dfs)选出顶点数最多的政府树,将剩余的与政府点不连通的点加入该树此时所有的点被分为k组,将每组中的点全部连同,可以得到最大总边数,减去已有边就是答案。...原创 2020-02-05 18:48:12 · 1497 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (D) Fight with Monsters 【贪心博弈】
题意n 只怪兽,每只的血量为 h[i] ,你的攻击力为 a ,你的对手攻击力为 b打每只怪兽时,都是你先出手,然后你的对手出手,这样轮流攻击如果是你给予了怪兽最后一击,你就能得到一分你还有 k 次机会能让你的对手暂停行动一回合问你最多能拿到多少分思路对于血量的计算,可以用 h=(h-1)%s+1 来降低到 1~s 的范围内然后判断这个 h ,如果h属于1~a,说明肯定是你击败这只怪...原创 2020-02-05 10:15:43 · 424 阅读 · 1 评论 -
Codeforces Round #617 (Div. 3), problem: (B) Food Buying 【math】
题意给你 x 块钱,你花费多少会返回给你 x / 10 取整的前,问你最多能花费多少?思路数学题,按照题意所说模拟即可code#include<bits/stdc++.h>#define endl '\n'using namespace std;typedef long long ll;int n,t;int main(){ ios::sync_with_s...原创 2020-02-05 09:42:55 · 485 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3), problem: (A) Array with Odd Sum 【math】
题意给你 t 组数据,每组输入一个n长度的数组,可以通过i 和 j 赋值,但 i ! = j ,问是否能使数组和为奇数思路不能组成奇数和的情况:全为偶数没有偶数,但奇数的个数为偶数其它情况都能满足和为奇数code#include<bits/stdc++.h>#define endl '\n'using namespace std;int n,t;int ...原创 2020-02-05 09:22:11 · 2659 阅读 · 0 评论 -
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2), problem: (C) Connect 【dfs】
题意0’表示陆地,‘1’表示水,在水上行走不会耗费金钱,如果要通过水,则需要建隧道,花费费用是(x1-x2)(x1-x2)+(y1-y2)(y1-y2),求最小花费。思路n比较小,可以暴力搜索code#include<bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=50+5;int n...原创 2020-02-04 17:31:49 · 1520 阅读 · 2 评论 -
Codeforces Round #549 (Div. 2), problem: (C) Queen 【思维】
题意输入一个n,表示有个节点,接着输入n行,每行两个数a,b,a表示是i 的父节点(i是第i行,表示第i个节点),b为1表示此节点不尊重其父节点,b为0表示尊重父节点,从小到大输出不尊重父节点并且他的左右子节点都不尊重他的节点思路对于c==0的情况,将父节点和子结点拿出来,即vis [ ] =1最后按顺序输出没有访问过得结点即可code#include<bits/stdc++.h...原创 2020-02-03 09:50:47 · 316 阅读 · 2 评论 -
Educational Codeforces Round 37 (Rated for Div. 2), problem: (C) Swap Adjacent Elements 【贪心】
题意你有一个由n个整数组成的数组。从1到n的每个整数在此数组中只出现一次。对于某些索引i(1≤i≤n - 1),可以将第i个元素与(i + 1)个交换,对于其他索引则不可能。您可以按任何顺序执行任意数量的交换操作。使用(i + 1)-th交换第i个元素的次数没有限制(如果不禁止该位置)。你能否按升序对这个数组进行排序,执行一系列交换操作?思路正向遍历所有元素,判断当前最大值是否大于编号...原创 2020-02-02 21:11:00 · 369 阅读 · 2 评论 -
Codeforces Round #484 (Div. 2), problem: (C) Cut 'em all! 【dfs】
题意去除尽可能多的边,使得剩下的连通块里点的个数都为偶数思路n为奇数直接输出-1偶数的话从一个点开始递归找节点的子节点的数目(包含本身),如果是偶数则可以直接去除,因为只有n-1个边,也就是说剩下的一定是一个偶数的连通块最后我们需要减1,因为本身这棵树如果是偶数的话也会算进去一次code#include<bits/stdc++.h>#define endl '\n'u...原创 2020-02-02 19:23:45 · 410 阅读 · 2 评论 -
Codeforces Round #216 (Div. 2), problem: (C) Valera and Elections 【树形dp+dfs】
题意给出n个点,n-1对关系,表示两点之间是否连通,1为连通,2为断。选中一个点,可以修复1到该点的路径上所有坏的边。求最少要选出哪些点。思路由于顶点数比较多,然后带权值,我们采用链式前向星建边,然后dfs。在回溯的过程中,如果在当前点的儿子存在有问题的边,那就不选这个点反之,如果没有并且连接这个点的边是有问题的边,这个点就是所求的点。回溯时情况:儿子存在有问题的边 不选择这个点 ...原创 2020-02-02 17:42:30 · 455 阅读 · 2 评论 -
Codeforces Round #197 (Div. 2), problem: (C) Xenia and Weights 【dfs回溯 31ms 100KB】
题意现有类似砝码的东西,重量在1~10。现在有一个天平,开始两边没东西,现在先往左边,再到右边,又到左边……放砝码。要求每次所放的那一边,重量总和要比另一边大。求出能满足条件的放砝码的序列。思路看当前这步放这个是否满足,满足则继续dfs下去,不满足就枚举下一个code#include<bits/stdc++.h>#define endl '\n'using namesp...原创 2020-02-02 16:41:59 · 384 阅读 · 2 评论 -
Codeforces Round #318 (Div. 2), problem: (B) Bear and Three Musketeers 【暴力】
题意在一个无向图中求一个三元环与外界最小连接边的数量思路数据正好,我们考虑枚举一条边,那么这条边的两端就确定了,再枚举一个点,那么判断该点是否和边的两个端点相连,如果是的情况下,我们统计每个点的入度,每次取最小值。因为是三元环,每个点的内度,也就是每个点必须和其他两个点相连,是2*3=6,最后用总度数减6就是最后答案。code#include<bits/stdc++.h>...原创 2020-02-02 11:20:50 · 399 阅读 · 2 评论 -
codeforces 161D - Distance in Tree 【树形dp:链式前向星】
题意求出树上距离为k的点对有多少个思路我们考虑计算出对于以u为根的子树中,距离u各种距离的节点的个数,这个值可以通过u的儿子v来更新枚举与u距离j的点,因为要统计距离为k的点个数,于是我们还需要距离k−j的点,因为通过v转移 ,有一个距离1,所以只需要找与v距离k−j−1的点的个数,乘起来就可以了dp[i][j] 表示距离这个点距离为j 的点的数量,通过枚举每一个点作为分支的根节点,复杂...原创 2020-02-02 10:41:22 · 344 阅读 · 2 评论 -
codeforces 161D - Distance in Tree 【树形dp】
题意求出树上距离为k的点对有多少个思路我们考虑计算出对于以u为根的子树中,距离u各种距离的节点的个数,这个值可以通过u的儿子v来更新枚举与u距离j的点,因为要统计距离为k的点个数,于是我们还需要距离k−j的点,因为通过v转移 ,有一个距离1,所以只需要找与v距离k−j−1的点的个数,乘起来就可以了dp[i][j] 表示距离这个点距离为j 的点的数量,通过枚举每一个点作为分支的根节点,复杂...原创 2020-02-02 10:38:29 · 462 阅读 · 2 评论 -
Codeforces Round #603 (Div. 2), problem: (D) Secret Passwords 【并查集】
题意现在你有n个密码,但里面有些密码是等价的,等价的定义是:假设存在一个字母x,在a和b字符串都出现过,那么a字符串和b字符串就是等价的。假设a字符串和c字符串等价,b和c字符串等价,那么a和b也等价。问你最少掌握多少个密码,就能掌握所有密码了思路并查集,每次将首字母和本字符串连接起来,最后求连通块的个数即可code#include<bits/stdc++.h>#de...原创 2020-02-01 16:41:42 · 1501 阅读 · 2 评论 -
Codeforces Round #151 (Div. 2), problem: (D) Colorful Graph【set】
题意一个图中,每个点被染成不同的颜色。同颜色的点构成集合中的等价类v(k),k为颜色的种类。现在又有一个集合q(k),代表某一个点的颜色为K,在它周围与它不同色的点。思路set类型的数组,来存每个点周围有几种不同的颜色,最后遍历,找周围颜色最多的编号同时也是最小的,输出编号code#include<bits/stdc++.h>#define endl '\n'using ...原创 2020-02-01 16:16:22 · 489 阅读 · 2 评论 -
Bayan 2015 Contest Warm Up, problem: (B) Strongly Connected City 【dfs】
题意给出n行m列的十字路口,<代表从东向西,>从西向东,v从北向南,^从南向北,问在任意一个十字路口是否都能走到其他任意的十字路口思路题目数据比较水,直接每个点开始爆搜,搜完之后,判断每个点能够访问的点的数目是否相同,相同的话则说明可以到达任意点code#include<bits/stdc++.h>#define endl '\n'using namespac...原创 2020-02-01 14:23:44 · 1544 阅读 · 2 评论 -
Codeforces Round #245 (Div. 1), problem: (A) Xor-tree【贪心+dfs】
题意给一颗n个节点的树,每个节点有一个值要么是0要么是1,改变某个节点的值时,它的儿子不变,它儿子的儿子翻转,它儿子的儿子的儿子不变,如此类推。给定各个节点的目标值,求最少的翻转次数,使得达到要求。思路贪心+Dfs判断当前节点的值,与目标值比较1.当前节点值由其上上一个节点值是否需要改变决定。2.Dfs每次传参p,q表示上前两层的节点改变。(通过p,q的交换,实现间隔改变节点值,同时...原创 2020-02-01 12:09:43 · 421 阅读 · 2 评论 -
Технокубок 2017 problem: (C) Andryusha and Colored Balloons【bfs】
题意给你几个连通的节点,现在想让你染色,且每个节点的颜色与和这个节点的父节点和爷爷节点的颜色不同,想让你计算最少需要用到几个颜色思路因为是连通的问题,所以用到vector容器,用push_back()压入,然后因为对节点的颜色有要求,所以bfs,从节点1开始,染色每次都从颜色1开始搜索并且判断其父节点和爷爷节点的颜色是否相同,若相同则颜色+1继续判断,直到不相同为止,由此可以得到最少需要用到...原创 2020-02-01 11:22:42 · 4489 阅读 · 2 评论 -
Codeforces Round #548 (Div. 2), problem: (C) Edgy Trees 【并查集+快速幂】
题意给了一棵树,n个点,m条边。让从中选k个点,使得从a1到a2,a2到a3,ak-1到ak的路径中至少经过一条黑色的边,问这样的集合有多少个思路用并查集统计一个连通块的节点个数,最后用总的减去他,设x是连通块的节点个数,o个联通块code#include<bits/stdc++.h>#define endl '\n'using namespace std;typede...原创 2020-01-31 18:29:19 · 507 阅读 · 2 评论 -
Codeforces Round #548 (Div. 2), problem: (C) Edgy Trees 【dfs+快速幂】
题意给了一棵树,n个点,m条边。让从中选k个点,使得从a1到a2,a2到a3,ak-1到ak的路径中至少经过一条黑色的边,问这样的集合有多少个思路用dfs搜一个连通块的节点个数,最后用总的减去他,设x是连通块的节点个数,o个联通块code#include<bits/stdc++.h>#define endl '\n'using namespace std;typede...原创 2020-01-31 18:23:35 · 3039 阅读 · 2 评论 -
Codeforces Round #244 (Div. 2), problem: (C) Checkposts 【Tarjan模板】
题意一共给你N个点,M条有向边。其中每个点都有其自己对应的权值,作为城市的市长,你希望设定警察局来保护所有的城市。如果我们在点i处设立了一个警察局,那么其点i是被保护的,而且如果一个点j,能够保证有路径从i到j,并且能够保证有路径从j回到i,那么点j也是被保护的。问将所有城市都保护起来的最小花费,以及对应最小花费有多少种设定的方式。思路我们既然是求两个点能互相到达,这其实有个名词叫强连通...原创 2020-01-31 17:15:29 · 591 阅读 · 2 评论 -
Codefest 18 (rated, Div. 1 + Div. 2), problem: (D) Valid BFS? 【模拟bfs】
题意给出一棵树,再给出一段序列吗,问这段序列是不是这棵树可行的bfs序思路直接模拟一遍bfs。先对构树的邻接表通过序列中的数的次序进行排序,再直接对树bfs,看其结果是否相同即可code#include<bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=2e5+5;int n;vec...原创 2020-01-30 16:49:27 · 1935 阅读 · 2 评论 -
Codeforces Round #286 (Div. 2), problem: (B) Mr. Kitayuta's Colorful Graph 【弗洛伊德floyd】
题意首行给出N和M,代表有N个点。接下来有M行,每行三个数字A,B,C,代表A到B有颜色为C的绳(也可以是线,随便是什么吧)。接着给出Q,代表Q次询问。接下来Q行,每行给出A和B,只有相同颜色的绳才可以把AB联通,问联通AB的绳子一共有多少种思路求两点之间有多少不同颜色的路径范围比较小 可以直接floydcode#include<bits/stdc++.h>#defin...原创 2020-01-30 16:02:24 · 610 阅读 · 2 评论 -
Codeforces Round #286 (Div. 2), problem: (B) Mr. Kitayuta's Colorful Graph 【二维并查集】
题意首行给出N和M,代表有N个点。接下来有M行,每行三个数字A,B,C,代表A到B有颜色为C的绳(也可以是线,随便是什么吧)。接着给出Q,代表Q次询问。接下来Q行,每行给出A和B,只有相同颜色的绳才可以把AB联通,问联通AB的绳子一共有多少种思路二维并查集,多了一个权值code#include<bits/stdc++.h>#define endl '\n'using na...原创 2020-01-30 15:51:53 · 639 阅读 · 2 评论 -
Codeforces Round #395 (Div. 1), problem: (A) Timofey and a tree 【思维】
题意是否存在一个点,去掉之后子图的颜色一样,如果有,就输出一个,如果有多个,就输出任意一个思路我们把这个题的边和点分开考虑,如果一个图中有不同的颜色,则必有一条边的两端不是同一种颜色,我们称这种边为特殊边,特殊边上的两个点称为特殊点,我们只需要比较特殊边的数量和特殊点被计算几次就可以了,如果特殊边和特殊点被计算的次数相同,则这就是我们需要找的点。举个栗子,3,1 2,2 3,1 2 1这组...原创 2020-01-30 15:18:16 · 1639 阅读 · 2 评论 -
Codeforces Round #254 (Div. 2), problem: (B) DZY Loves Chemistry 【并查集】
题意有1-n种化学药剂 总共有m对试剂能反应,按不同的次序将1-n种试剂滴入试管,如果正在滴入的试剂能与已经滴入的试剂反应,那么危险数*2,否则维持不变。问最后最大的危险系数是多少思路采用并查集,维护连通性,注意左移次数,会卡long longcode#include<bits/stdc++.h>#define endl '\n'using namespace std...原创 2020-01-30 12:16:33 · 1841 阅读 · 2 评论 -
Good Bye 2014, problem: (B) New Year Permutation 【并查集】
题意给你 n 个数字的序列,然后给你 n 行字符串,如果第 i 行字符串对应的第 j 列的字符是1,说明序列 i 和 j 对应的数字可以互换,求所能互换的最小字典序的序列思路并查集,输入每行的时候,如果对应的列是1,就把该行和该列用并查集连接起来,然后再遍历序列的每一个数字,把属于一个联通块的数字进行比较code#include<bits/stdc++.h>#define ...原创 2020-01-30 11:45:55 · 1537 阅读 · 2 评论 -
Codeforces Round #252 (Div. 2), problem: (C) Valera and Tubes 【模拟】
题意在 n * m 的表格里放下k个管子注意每个管子长度至少为2一定要铺满思路只要填满格子,并且要求每个管子最少占据两个格子。那么只要k-1个管子每个管子占据两个格子,剩下的一个管子占据剩下的所有格子。这样得到的一定是正解当中的一个解。code#include<bits/stdc++.h>#define endl '\n'using namespace std;i...原创 2020-01-30 10:55:37 · 1845 阅读 · 0 评论 -
Codeforces Round #435 (Div. 2), problem: (B) Mahmoud and Ehab and the bipartiteness 【染色法dfs】
题意给定一个n 个节点 n-1 条边的图,求最多还能加几条边,保证这个图不存在重边,自环,并且是一个二分图思路树必然是二分图,一定有n-1条边,我们先dfs对其二分染色,把点分为两个集合,两集合大小的积|s1|*|s2|就是最多能有的边数,减去原边数即是所求。code#include<bits/stdc++.h>#define endl '\n'using namesp...原创 2020-01-29 12:31:04 · 545 阅读 · 0 评论 -
2020 C++ priority_queue 最大堆与最小堆介绍
文章目录1、问题描述2、具体分析3、其他方式4、用最小堆解决问题1、问题描述通常在刷题的时候,会遇到最大堆、最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何处理?这时,就可以借助C++ STL的priority_queue。2、具体分析 需要注意的是,C++ STL默认的priority_queue是将优先级最大的放在队列最前面,也即是最大堆。那么如何实现...原创 2020-01-29 11:48:55 · 2273 阅读 · 2 评论 -
Codeforces Round #536 (Div. 2), problem: (D) Lunar New Year and a Wander 【最小堆+bfs】
题意求出漫步时的最小的节点顺序思路最小堆保证字典序最小,vis保证每个点只输出1次用vector建立邻接表然后一次bfs跑一遍图就好了code#include<bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=1e5+5;int n,m;int vis[maxn];vector&...原创 2020-01-29 11:47:54 · 588 阅读 · 0 评论 -
Codeforces Round #479 (Div. 3), problem: (E) Cyclic Components 【dfs】
题意求单圈环的个数【单圈环就是只有一个圈的环】思路观察单圈环的可以发现它的一个性质每个点的度都是2,所以【方法一】只需要用dfs遍历一下所有连在一起点,查看点的度是不是为2code#include<bits/stdc++.h>#define endl '\n'using namespace std;const int maxn=2e5+5;vector<int...原创 2020-01-29 11:04:34 · 423 阅读 · 0 评论 -
Educational Codeforces Round 65 (Rated for Div. 2), problem: (C) News Distribution【并查集】
题意求每个点所在连通块的大小思路用并查集简化求每个点的秩即可code#include<bits/stdc++.h>#define endl '\n'using namespace std;int n,m;const int maxn=1e6+5;int pre[maxn],erank[maxn];int findPre(int x){ if(x!=pre[...原创 2020-01-28 20:52:28 · 551 阅读 · 1 评论 -
Codeforces Round #290 (Div. 2), problem: (C) Fox And Names 【BFS+无前驱的顶点优先+拓扑排序】
题意有N个字符串,要求你给出一个字典序,使它们按字典序排序后的结果和输入顺序一样。思路显然对于一个字符串i优先于字符串j,i的第一个和j不同的字母优于j的对应的字母。(若找不到该字母,即i是j的前面一部分则可以直接判断无解)那么我们可以得到很多对字母之间的优先顺序,要给出26个字母的优先顺序,无非就是拓扑排序。采用无前驱的顶点优先BFS的拓扑排序,如果存在没有被拓扑排序所排序到的节点,那...原创 2020-01-28 16:40:15 · 590 阅读 · 1 评论