Codeforces 982C(dfs+思维)】的更多相关文章

C. Cut 'em all! time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You're given a tree with nn vertices. Your task is to determine the maximum possible number of edges that can be removed in s…
K - Cut 'em all! CodeForces - 982C 给一棵树 求最多能切几条边使剩下的子树都有偶数个节点 如果n是奇数 那么奇数=偶数+奇数 不管怎么切 都会有奇数 直接打印-1 贪心 如果子树中的点是偶数 就可以直接切了 最后答案要减一 因为原来的树也是偶数个节点 会被统计进去 #include <cstdio> #include <vector> #include <algorithm> using namespace std; ; int res…
/*hdu6035[dfs+思维] 2017多校1*/ //合并色块, 妙啊妙啊 #include<bits/stdc++.h> using namespace std; ; const int inf=0x3f3f3f3f; typedef long long LL; vector<]; LL sum[]; ],son[],mark[]; ,kase=; LL ans,res; void dfs(int u,int fa){ son[u]=; LL y=sum[c[u]]; LL x=…
D. Eternal Victory time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Valerian was captured by Shapur. The victory was such a great one that Shapur decided to carve a scene of Valerian's defe…
CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身一共有几个灯是亮的.pow x,表示你需要改变x的子树和x本身上的灯的状态. 题解思路 这个题肯定是用DFS序了,为啥?因为树不好操作啊(我也不会啊),使用DFS序可以把树压成一维的一串数,这样就可以使用线段树来进行区间操作了. 话说这个题是我暑假限时训练中做的,看到这个题老开心了,但是让我万万没想…
题意:给出n(0≤n≤22)和m,和m个数ai,1 ≤ m ≤ 2n ,0≤ai<2n ,把ai & aj == 0 的连边,求最后有几个连通块 解析:一个一个去找肯定爆,那么就要转换一下思维,想一下什么样的数才能按位与ai为0 那么肯定是ai ^ ((1<<n)-1)的子集,所以去找它的所有子集即可 例1010  变成0101  子集有 0101  0100  0001 然后只有x是给出的那m个数种的时候 才能 ^ ,其他情况消1取子集 #include <bits/st…
题目链接:http://codeforces.com/contest/931/problem/D 题目大意:给你一颗树,每个节点都会长苹果,然后每一秒钟,苹果往下滚一个.两个两个会抵消苹果.问最后在根节点能收到多少个苹果. 解题思路:昨天是我想复杂了,其实就是统计下每层的苹果数,若是奇数则答案+1.因为最终这些苹果都会滚落汇聚到根节点,所以在滚落过程中肯定会碰撞并相消无论苹果是怎么分布的. 代码: #include<iostream> #include<cstdio> #inclu…
http://codeforces.com/gym/101246/problem/G 题意:有一个n个点m条边的有向图,现在可以修改某一条有向边使得其为无向边,问修改哪些边可以使得修改后的强连通分量的点数最多,输出. 思路: 要使得修改边后的强连通分量的点数最多,假设当前修改的边的入点为u,出点为v,那么能在修改当前的边之后在强连通分量里面的点i,当且仅当修改边之前u能到达i并且i能到达v,然后修改之后,i就能通过v回到u,这样就是强连通的了.比如上面这个样例的1->5这条边,1(u)能到达1.…
http://codeforces.com/problemset/problem/760/C 题意:有n个盘子,每个盘子有一块肉,当肉路过这个盘子的时候,当前朝下的这一面会被煎熟,每个盘子有两个数,pi代表接下来去第pi个盘子,bi为1的话,这块肉会被反面,0的话这块肉不变.对于每块肉,要让它的两面都在每个盘子里面煎过,问最少的修改次数. 思路:有两个条件:1.让图变得连通最少需要修改的方案.2.要让肉两边都被煎到要怎么考虑. 1.这个简单就是一遍DFS求出连通块数,如果连通块数是1的话,就不需…
题目链接:http://codeforces.com/contest/799/problem/D 题意:给出h*w的矩阵,要求经过操作使得h*w的矩阵能够放下a*b的矩阵,操作为:将长或者宽*z[i] 有n个z[i]而且每个z[i]只能用一次. 题解:首先我们知道最少要扩大几倍, x = a / h + (a % h ? 1 : 0); y = b / w + (b % w ? 1 : 0); 当然要先排一下序从大到小,然后再是for一遍 pp *= z[i]; 如果pp>=x*y就是可行. 然…
题目链接:http://codeforces.com/contest/764/problem/C 题意:给出一个树,然后各个节点有对应的颜色,问是否存在以一个点为根节点子树的颜色都一样. 这里的子树颜色都一样表示分出来的子树各自颜色一样. 就是随意找一个树叶节点然后一直遍历,直到找到一个和他颜色不一样的节点,那么要么取不一样的节点 为根或者取最后一个一样的节点为根.然后就dfs一遍. #include <iostream> #include <cstring> #include &…
题目链接:http://codeforces.com/contest/760/problem/C 题意:一共有N个烤炉,有N个烤串,一开始正面朝上放在N个位子上.一秒之后,在位子i的串串会移动到pi位子上,并且如果bi为1,那么我们还要将烤串翻个面.现在要求每个烤串的正反两面要经历所有位置,然而现在的机制不一定能够完成任务,让你修改最少的操作,使得满足这个操作. 显然要满足只有一个环才能实现经历所有位置,而且要经历正反面所以一趟循环下来变化次数必须为奇数,不然回到原来位置时还是同样的朝向 #in…
题目链接: https://cn.vjudge.net/problem/1576783/origin 输入输出: ExamplesinputCopy42 44 13 1outputCopy1inputCopy31 21 3outputCopy-1inputCopy107 18 48 104 76 59 33 52 102 5outputCopy4inputCopy21 2outputCopy0NoteIn the first example you can remove the edge bet…
B. Destruction of a Tree time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a tree (a graph with n vertices and n - 1 edges in which it's possible to reach any vertex from any ot…
D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output As you know, an undirected connected graph with n nodes and n - 1 edges is called a tree. You are given an integer d and a tree…
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼怪. 然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪. 于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标. 第一次射击的分析结果会反映在一张由n个点和m条边组成的无向图上.现在让我们来确定这张图 是不是可以被认为是章鱼怪…
Cyclic Components CodeForces - 977E You are given an undirected graph consisting of nn vertices and mm edges. Your task is to find the number of connected components which are cycles. Here are some definitions of graph theory. An undirected graph con…
http://codeforces.com/gym/101257/problem/B 题意:给出两棵叶子数一样的树,在将叶子合并之后,对这个图进行染色,相邻的结点颜色不能相同,问最少需要染的颜色数,并输出合并叶子的方案. 思路:画了好几个图找了下规律,发现对于任意一个这样的图,最多只需要染三种颜色,最少是染两种颜色. 如果合并后的图,每一条从一棵树的根节点走到另一棵树的根节点的路径长度的奇偶性相同,那么这个时候就是只需要染两种颜色. 剩下的情况就是染三种颜色了. 对于每棵树,随便找一个不是叶子结…
题意: 给你01字符串的长度再给你一个串. 然后你可以在这个串中选择一个起点和一个终点使得这个连续区间内所有的位取反. 求: 经过处理后最多会得到多少次01变换. 例如:0101是4次,0001是2次,000110是3次. 分析: 区间内部的数目是不会发生变化的,因为每一位都是按位取反,相当于都没变,唯一发生变化的是区间边缘,所以考虑到连续的两个或多个1或者0的时候在其中某处设置断点会使得变换次数增加,很容易理解当某处有两个连续点的时候变换次数增加1,因为一个区间只有两个端点所以变换次数最多增加…
题目大意:在图中找到一个字符可以围成一个环(至少有环四个相同元素) 题目思路:对当前点进行搜索,如果发现可以达到某个已经被查找过的点,且当前点不是由这个点而来,则查找成功. #include<cstdio> #include<stdio.h> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<cstring>…
先抽象出一棵以1做为根结点的树.给定了访问序列a[1..m]. 考虑两种特殊情况: 1.访问了某个a[j],但是存在a[i]没有访问且i < j,出现这种情况说明a[j]一定是a[i]的祖先节点,必须访问过a[j]才能访问a[i],这种情况是不符合条件的. 2.当某个点被访问后并且这个节点被回溯之后,它的子树中仍然存在序列中的节点没被访问,那么些节点不会有机会再被访问,不符合情况. 思路:根据访问序列中节点的下标,给定所有待访问节点一个权值,代表他们的访问顺序,例如数据: 7 1 2 1 3 2…
题目链接 题意 给一棵树,对于一个节点,与它相邻的结点可以连一条边,求所有点对间距离之和 思路 任意两点间的距离被优化为$\left \lceil \frac{s}{2} \right \rceil$,转化为任意两点间距加间距为奇数的路径数,即$\frac{\sum_{i\in G,j\in G,i<j}dis[i][j]+\sum_{i\in G,j\in G,i<j[dis[i][j]=1(mod 2)]}}{2}$,奇数路径可由深度奇偶性不同的点数相乘得到,即$\sum_{i\in G}…
Polycarp likes to play with numbers. He takes some integer number xx, writes it down on the board, and then performs with it n−1n−1 operations of the two kinds: divide the number xx by 33 (xx must be divisible by 33); multiply the number xx by 22. Af…
题意: 给出一棵树,问最多去掉多少条边之后,剩下的连通分量的size都是偶数. 思路: 如果本来就是奇数个点,那么无论去掉多少条边都不可能成立的. 如果是偶数个点,就进行一次dfs,假设一个点的父亲是u,儿子是v,那么可以去掉(u,v)的条件就是v及其子树有偶数个点,任何一条这样的边都是可以去掉的. 所以一边dfs,一边统计答案就可以了. 代码: #include <stdio.h> #include <string.h> #include <algorithm> #i…
You are given qq queries in the following form: Given three integers lili, riri and didi, find minimum positive integer xixi such that it is divisible by didi and it does not belong to the segment [li,ri][li,ri]. Can you answer all the queries? Recal…
题目链接:http://codeforces.com/problemset/problem/1038/D 题意: 给出 $n$ 个史莱姆,每个史莱姆有一个价值 $a[i]$,一个史莱姆可以吃掉相邻的史莱姆,此时其自身的价值就要减掉被吃掉的那个史莱姆的价值. 史莱姆会不断的互相吞噬直到最后只剩一个,要求你该史莱姆可能的最大价值. 题解: 相当于你在 $n$ 个数前面添加 $+$ 或者 $-$,然后拼成一个算式计算答案. 首先考虑到的是,史莱姆的价值是全正或者全负的情况,这样的话,不可能使得所有价值…
题意:wzms 今年举办了一场剪刀石头布大赛,bleaves 被选为负责人. 比赛共有 2n 个人参加, 分为 n 轮, 在每轮中,第 1 位选手和第 2 位选手对战,胜者作为新的第 1 位选手, 第 3 位和第 4 位对战,胜者作为新的第 2 位选手,以此类推. bleaves 调查得知,每个人都有其偏爱决策,每个人在每一次对战中都会使用他的偏爱决策. 如果一次对战的双方的偏爱决策相同,那么这次对战就永远不会结束,所以 bleaves 不希望这种情况发生. 现在 bleaves 知道了每个人的…
大意: 给定树, 每个节点有一个字母, 每次询问子树$x$内, 所有深度为$h$的结点是否能重排后构成回文. 直接暴力对每个高度建一棵线段树, 查询的时候相当于求子树内异或和, 复杂度$O((n+m)log(n+m))$ 看了别人题解后发现有简单做法, 高度相同的点在每个子树内的dfs序一定相邻, 直接维护每一层的异或和, 每次二分出该层属于$x$的子树的一段区间即可. 放一下线段树暴力的代码 #include <iostream> #include <algorithm> #in…
Mahmoud and Ehab continue their adventures! As everybody in the evil land knows, Dr. Evil likes bipartite graphs, especially trees. A tree is a connected acyclic graph. A bipartite graph is a graph, whose vertices can be partitioned into 2 sets in su…
题意: 就是有一颗树  然后每次询问 父结点 的 第k个结点是不是他的子嗣...是的话就输出这个子嗣..不是 就输出-1 解析: 突然想到后缀数组的sa 和 x的用法..就是我们可以用一个id标记当前结点的等级 用idx标记等级ans是哪一个结点..然后用en标记结点u的子嗣的结束结点 然后每次判断一下就可以了 #include <iostream> #include <cstdio> #include <sstream> #include <cstring>…