题目链接: 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…
题意: 给出一棵树,问最多去掉多少条边之后,剩下的连通分量的size都是偶数. 思路: 如果本来就是奇数个点,那么无论去掉多少条边都不可能成立的. 如果是偶数个点,就进行一次dfs,假设一个点的父亲是u,儿子是v,那么可以去掉(u,v)的条件就是v及其子树有偶数个点,任何一条这样的边都是可以去掉的. 所以一边dfs,一边统计答案就可以了. 代码: #include <stdio.h> #include <string.h> #include <algorithm> #i…
 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 suc…
K - Cut 'em all! CodeForces - 982C 给一棵树 求最多能切几条边使剩下的子树都有偶数个节点 如果n是奇数 那么奇数=偶数+奇数 不管怎么切 都会有奇数 直接打印-1 贪心 如果子树中的点是偶数 就可以直接切了 最后答案要减一 因为原来的树也是偶数个节点 会被统计进去 #include <cstdio> #include <vector> #include <algorithm> using namespace std; ; int res…
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…
Cut 'em all! 题意:求删除了边之后,剩下的每一块联通块他的点数都为偶数,求删除的边最多能是多少. 题解:如果n为奇数,直接返回-1,因为不可能成立.如果n为偶数,随意找一个点DFS建树记录下他的子孙+本身的个数.然后再DFS一下,对于每一个点,他的个数为偶数,就把他与父节点的边隔断, cnt++. 最后cnt就是答案. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.t…
题目链接: codeforces 615 B. Longtail Hedgehog (DFS + 剪枝) 题目描述: 给定n个点m条无向边的图,设一条节点递增的链末尾节点为u,链上点的个数为P,则该链的beauty值 = P*degree[u].问你所有链中最大的beauty值. 解题思路: 因为只需要找到以每个节点为终点的最长递增链即可,所以建图的时候可以建成从编号小的节点到编号大的节点的有向图,然后用DFS搜索,但是直接暴搜会TLE,然后就开始了我的TLE之路,TLE24, TLE42,TL…
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂直于河岸的一条直线上) 还有青蛙能够跳跃的 最多 的次数,还有每个石头离河岸的距离,问的是青蛙一步最少要跳多少米可以过河> 这是一道二分加贪心的题,从0到的河宽度开始二分,二分出一个数然后判断在这样的最小步数(一步跳多少距离)下能否过河 判断的时候要贪心 主要难在思维上,关键是要想到二分上去,能想到…
构造两颗深度为30的字典树(根节点分别是0和1),结点只有0和1,从根节点向下DFS,贪心取答案. #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; vector<int>a; int dfs(vector<int>b,int x){ ||b.size()==)//30位都枚举完毕或当前向量中没有数字就中止 ; vector<int>c,d; ;i<b.s…
解题思路: 代码中有详细注解,以任意一点为根,dfs遍历这棵树. 每一个节点可能有好几个子树,计算每棵子树含有的节点数,再+1即为这整棵树的节点. 判断子树是否能切断与根之间的联系,如果子树含有偶数个节点,则这棵子树可以被切断. 注意: 若由于我们建立这棵树的时候不知道两个连接的节点谁是谁的父节点. 所以我们在dfs中加个标记,找出除父节点以外的其他节点. #include <bits/stdc++.h> using namespace std; typedef long long ll; l…