UVALive 6948 Jokewithpermutation dfs】的更多相关文章

题目链接:UVALive 6948  Jokewithpermutation 题意:给一串数字序列,没有空格,拆成从1到N的连续数列. dfs. 可以计算出N的值,也可以直接检验当前数组是否合法. #include <stdio.h> #include <iostream> #include <string.h> #define maxn 100 using namespace std; char str[maxn]; int num[maxn]; bool vis[m…
题意就是把一段序列拆成从1到n的形式 一开始暴力了一下 后来发现bug太多一定是思路不对…… #include<stdio.h> #include<iostream> #include<algorithm> #include<math.h> #include<string.h> #include<map> #include<vector> #include<queue> #define M(a,b) memse…
Problem J. Jokewithpermutation Input file: joke.inOutput file: joke.out Joey had saved a permutation of integers from 1 to n in a text file. All the numbers were written asdecimal numbers without leading spaces.Then Joe made a practical joke on her:…
题目链接:https://vjudge.net/contest/241341#problem/C 题目大意:给你从1到n总共n个数字,同时给你n-1个连接,同时保证任意两个点之间都可以连接.现在假设任意两个点简单连通路过某点则某点的繁荣度+1,求所有点的最大繁荣度. 解题思路:以它为例,根据题意,对于C节点我们要计算它的繁荣度,一般大家都会的,肯定就是1*1+1*3+1*3=7:也就是说是以C为根节点的任意两颗子树节点个数的乘积的和,不过这样感觉好像很复杂啊,又要计算以每个节点为根节点的子树节点…
题意:n个点连成的生成树(n个点,n-1条边,点与点之间都连通),如果某个点在两点之间的路径上,那这个点的繁荣度就+1,问你在所有点中,最大繁荣度是多少?就比如上面的图中的C点,在A-B,A-D,A-E,A-F,B-D,B-E,B-F的路径上,所以繁荣度为7. 思路:我们可以想一下,繁荣度是怎么来的?假设一个点的度是2,相当于以这个点为根,有两棵子树,那繁荣度就是这两棵子树上各取一个点两两组合,最后的结果就是两棵子树上的点的乘积.所以不难推出,若度大于2,那繁荣度就是所有子树上的点树两两相乘的和…
给一棵树,每次每次询问一个点是否是另一个点的祖先? 输入时是每个下标对应节点的儿子的数量 用dfs序 时间戳.. 如果一个点是另一个点的祖先,那么它的两个标记一定在祖先的范围之内 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector>…
题意:一棵树q次查询,每次查询给三个不同的点,要求计算到这三个点的比其他两个距离都要小的点数 题解:很明显的lca,倍增的找中点,关键是两个点的中点很好找,但是三个点不好找,我刚开始还准备分类讨论,后来发现巨麻烦,其实可以用线段树来维护算a的答案其实就是a在b下的答案和a在c下的答案的交集,可以用线段树区间求和区间查询做,每次更新完之后复原就不用memset线段树了 //#pragma comment(linker, "/stack:200000000") //#pragma GCC…
这两道题都是用简单dfs解的,主要是熟悉回溯过程就能做,据说用bfs也能做 道路修建(HYSBZ - 2435) 在 W 星球上有n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好n – 1条双向道路. 每条道路的修建都要付出一定的费用, 这个费用等于道路长度乘以道路两端的国家个数之差的绝对值.例如,在下图中,虚线所示道路两端分别有 2 个.4个国家,如果该道路长度为 1,则费用为1×|2 – 4|=2.图中圆…
题目传送门 /* 题意:将字符串分割成一个全排列 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 DFS还是写不来,难道是在家里懒? */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ; const int INF = 0x3f3f3f3f; char s[MAXN…
题意: 给出K1,求一个12位数(不含前导0)K2,使得K1^K2 mod (10^12) = K2. 解法: 求不动点问题. 有一个性质: 如果12位数K2满足如上式子的话,那么K2%1,K2%10,K2%100,...,K2%10^12都会满足如上式子.那么我们可以dfs从后往前一个一个找出这个数的每一位. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstdli…