dfs
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
URAL - 1742
题目链接:URAL - 1742 显然,最小次数就是入度为0的点+单独环的个数。 最多的个数就是:每个环只能贡献一次,答案就为n - 所有环的大小 + 环的个数。 我们直接DFS找环即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5+10; int n,原创 2020-08-22 22:59:36 · 170 阅读 · 0 评论 -
Codeforces - Inna and Dima
题目链接:Codeforces - Inna and Dima 先DFS判环。然后DAG上最长路。 但是要注意最长路的时候,一定要从’D’开始。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e3+10; const int dx[]={0,1,0,-1},dy原创 2020-08-16 17:12:46 · 182 阅读 · 0 评论 -
买一送一
题目链接:买一送一 因为我们只需要对每个点维护到根节点的一条链,所以可以想到用入栈添加出栈删除来维护到当前节点的一条链上信息。 当前节点的答案可以由上一个节点转移,然后加上到之前一样颜色的点之间的不同颜色数量。然后注意选两个相同节点的情况。 注意细节即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespa原创 2020-07-23 23:30:10 · 336 阅读 · 0 评论 -
Codeforces - Orientation of Edges
题目链接:Codeforces - Orientation of Edges 我们先求最少能到的点。 然后如果当前能到的点,能连向不能到的点,那么因为是最小,肯定反向的无向边。 然后看最多能到的点。 我们就直接把无向边当成两条有向边加进来即可,然后看一下用的哪一条边即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using原创 2020-07-16 19:21:52 · 211 阅读 · 0 评论 -
偶树的切分
题目链接:Codeforces - 偶树的切分 显然贪心,能切就切。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5+10; int n,res; vector<int> g[N]; inline void add(int a,int b){g[原创 2020-06-24 23:34:27 · 136 阅读 · 0 评论 -
Fennec VS. Snuke
题目链接:Fennec VS. Snuke 其实很显然,1->n只有一条路径。肯定先压缩对面的空间。 然后每个点其实被谁选就固定了。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5+10; int n,col[N],dep[N],f[N],num[5]原创 2020-06-20 13:18:44 · 335 阅读 · 0 评论 -
Connections
题目链接:Connections 我们先随便从1号点开始,建立一个dfs树。 然后对反向边建立dfs树,然后把边全部拿出来,一定是有解的。 因为1能到所有点,所有点也能到1,那么都可以通过1号点周转必有解。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#def...原创 2020-04-13 19:58:34 · 338 阅读 · 0 评论 -
[POI2008]CLO-Toll
题目链接:[POI2008]CLO-Toll 显然对于一个联通块,存在环,那么就有解,否则无解。 所以无解:联通块为一棵树。 否则,我们随便建立一个dfs树,然后碰到返祖边的时候,往上到根,反边更新即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#defi...原创 2020-03-26 12:57:50 · 236 阅读 · 0 评论 -
CF525E Anya and Cubes
题目链接:CF525E Anya and Cubes Meet in the middle即可,如果直接暴力,复杂度太大,剪枝也不可做。 故只能折半。把dfs2的求值,可以用前缀和优化,可以拿 rank1; AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #defin...原创 2020-01-31 19:49:53 · 476 阅读 · 1 评论 -
[Beijing wc2012]最多的方案
Description 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数。现在给一个正整数N,它可以写成一些斐波那契数的和的形式。如果我们要求不同的方案中不能有相同的斐波那契数,那么对一个N最多可以写出多少种方案呢? Input 只有一个整数N。 Output 一个方案数 Sample Input 16 ...原创 2020-01-28 21:41:55 · 269 阅读 · 0 评论 -
[CEOI2015 Day2]世界冰球锦标赛
题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸的是,他的财产十分有限,他决定把所有财产都用来买门票。 给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过...原创 2020-01-16 13:41:27 · 385 阅读 · 0 评论 -
2019EC-final M - Value
Pang believes that one cannot make an omelet without breaking eggs. For a subset A of {1,2,…,n}, we calculate the score of A as follows: Initialize the score as 0. For any i∈A, add ai to the score. Fo...原创 2020-01-12 19:12:07 · 625 阅读 · 0 评论 -
水图
题目链接:水图 我们不难想到,我们走到最后一个点之后不用走回来。 所以如果我们需要走回来,那么答案就是所有边的二倍权值和,但是现在我们不需要走回来。 所以我们就是要不走回来的权值和最大,也就是以x为起点的直径。 直接dfs或者bfs即可。 AC代码: #include<bits/stdc++.h> #define int long long using namespace std;...原创 2019-12-23 18:03:48 · 224 阅读 · 0 评论 -
筱玛的迷阵探险
题目链接:筱玛的迷阵探险 数据量比较小,于是可以想到爆搜,但是复杂度为 2^40,必然不行,于是对于二进制求max,我们可以想到用Trie去维护。 怎么做呢?我们双向dfs,对每一个走到 n/2 步数的节点分别开一个Trie,然后下一次从终点走到这个节点时,然后从这个节点当中的Trie里面去找max。 总复杂度为: 2^20 * 30 完全ok。 AC代码: #include<bits/s...原创 2019-12-23 17:09:21 · 94 阅读 · 0 评论 -
HDU - 2376
Average distance Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1980 Accepted Submission(s): 717 Special Judge Problem Description Given a ...原创 2019-09-14 18:07:49 · 264 阅读 · 0 评论 -
棋盘
题目描述: 有一个m×mm×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费 11个金币。 另外, 你可以花费 22 个金币施展魔法让下一个无...原创 2019-05-03 16:21:35 · 533 阅读 · 0 评论