CF982C Cut 'em all!

思路:

在深搜过程中,贪心地把树划分成若干个连通分支就可以了。划分的条件是某个子树有偶数个节点。注意到在一次划分之后并不需要重新计数,因为一个数加上一个偶数并不影响这个数的奇偶性。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN = 100005;
 4 vector<int> G[MAXN];
 5 bool vis[MAXN];
 6 int ans = 0;
 7 int dfs(int u)
 8 {
 9     vis[u] = true;
10     int cnt = 0;
11     for (int i = 0; i < G[u].size(); i++)
12     {
13         int tmp = G[u][i];
14         if (!vis[tmp]) cnt += dfs(tmp);
15     }
16     if (cnt & 1) ans++;
17     return cnt + 1;
18 }
19 int main()
20 {
21     int n, x, y;
22     while (cin >> n)
23     {
24         for (int i = 1; i <= n; i++) G[i].clear();
25         memset(vis, 0, sizeof vis);
26         ans = 0;
27         for (int i = 0; i < n - 1; i++)
28         {
29             cin >> x >> y;
30             G[x].push_back(y);
31             G[y].push_back(x);
32         }
33         if (n & 1) { cout << -1 << endl; continue; }
34         dfs(1);
35         cout << ans - 1 << endl;
36     }
37     return 0;
38 }

CF982C Cut 'em all!

原文地址:https://www.cnblogs.com/wangyiming/p/9060464.html

时间: 2024-10-20 15:04:51

CF982C Cut 'em all!的相关文章

Codeforces 982 C. Cut &#39;em all!(dfs)

解题思路: 代码中有详细注解,以任意一点为根,dfs遍历这棵树. 每一个节点可能有好几个子树,计算每棵子树含有的节点数,再+1即为这整棵树的节点. 判断子树是否能切断与根之间的联系,如果子树含有偶数个节点,则这棵子树可以被切断. 注意: 若由于我们建立这棵树的时候不知道两个连接的节点谁是谁的父节点. 所以我们在dfs中加个标记,找出除父节点以外的其他节点. #include <bits/stdc++.h> using namespace std; typedef long long ll; l

Codeforces --- 982C Cut &#39;em all! DFS加贪心

题目链接: 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

阻止右键菜单(阻止默认事件)&amp;&amp;跟随鼠标移动(大图展示)&amp;&amp;自定义右键菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

css中的px、em、rem 详解

概念介绍: 1.px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选.Windows系统默认是96dpi,Apple系统默认是72dpi. 2.em(相对长度单位,相对于当前对象内文本的字体尺寸):是一个相对长度单位,最初是指字母M的宽度,故名em.现指的是字符宽度的倍数,用法类似百分比,如:0.8em, 1.2em,2em等.通常1em=16px

关于EM的理解

任意浏览器的默认字体高度16px(16像素). 所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择器中声明font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了. 1.浏览器的默认字体大小是16px 2.如果元素自身没有设置字体大小,那么元

EM算法(1):K-means 算法

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解 EM算法(1) : K-means算法 1. 简介 K-means算法是一类无监督的聚类算法,目的是将没有标签的数据分成若干个类,每一个类都是由相似的数据组成.这个类的个数一般是认为给定的. 2. 原理 假设给定一个数据集$\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2,...,\mathbf{x}_N \}$, 和类的个数K.我们的每个类都用一个中心点$

EM算法(3):EM算法详解

目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法详解

Oracle安装完成后重新安装EM过程

启动Oracle11G emctl start dbconsole 报如下错误 Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da 此时输入export ORACLE_UNQNAME=orcl(实例名) 重新输入 emctl start dbconsole 报如下错误 OC4J Configuration issue. /oracle/product/11.1.0/db_1/oc4j/j

em创建的两种方式

em创建(两种方式1,图形dbca,当然了,前提是先创建一个监听. 2,手工命令安装em)手工命令创建em(确保数据库开启,确保监听正常并且最好是动态监听,确保system表空间够用大概1G左右),我的空间有限只给了800M,如下 select file_name,tablespace_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'SYSTEM';alter database datafile '/u01