P1922 女仆咖啡厅桌游吧
P1922 女仆咖啡厅桌游吧
题目背景
小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧。
妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的。”
小v:“全部都听!?”
妹妹:“嘻嘻嘻,你还是回答问题吧!”
于是小v为了自己一天的幸福,来向你求助。
题目描述
小v所在的世界被规划成了树形结构,每一个节点上都可以建一个女仆咖啡厅或者桌游吧或者什么都不建。在确定点1为根节点之后,规划局要求:对于每一个非叶子的节点i,设它子树(包括自己)中所有的女仆咖啡厅的数量为cafe[i],桌游吧数目为table[i],都有cafe[i]等于table[i]。
妹妹的问题是:这颗树最多能放多少个女仆咖啡厅。
输入输出格式
输入格式:
第一行,一个正整数N
第二至N行,每行两个正整数ui,vi,表示vi,ui有一条边。
输出格式:
只有一行,最多能放的女仆咖啡厅的个数。
输入输出样例
说明
对于30%的数据,1<=N<=20
对于100%的数据,1<=N<=10^5
洛谷题解:
正在我准备交题解时,发现有人提前交了,令我很尴尬于是我决定用一种OP的方法来诠释这道题
首先,AC链接
215ms比第二快15ms(然并卵)
好,开始正文
等等,我先解释一波,由于算法比较玄学,所以需要画图,然而蒟蒻我并不知道怎么把图传到网站上,所以,大家将就着拿笔画一下吧。。。
我们先看样例吧(其实是我懒的造数据),算了还是自己造吧,好像不太好,来一波输入(只有边)
1 2 2 3 3 4 4 5 5 6 4 7 2 8 好的就这样吧
先说点别的(感觉今天非常语无伦次)
首先如果答案想要增加,必然要有其它的叶节点的参与,因为内部节点全部为偶数,在内部节点间传递不会增加,所以内部节点间互不干扰,所以只要统计每个内部节点连接的叶节点数就好,因为内部节点算作自己的子树的一部分,所以如果一个内部节点连接的叶节点数为奇数,则内部节点开一个店,否则不开,那么很容易想到统计度数为一的点然后找唯一与其相连的点并使该点的权值加一,每当权值为奇数时就++ans,进一步,因为奇偶只看最后一位二进制,所以每次只要让权值异或1就好了,接下来,因为奇数时加而奇数时权值为一,那么我们简单粗暴一点,直接ans+=权值^=1就好
接下来上代码
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int n;
int u,v;
int ans;
int sum[];
bool ok[];
int b[];
inline void cl(int,int);
int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for (int i=;i<n;++i){
cin>>u>>v;
cl(u,v);
cl(v,u);
}
for (int i=;i<=n;++i)
if (ok[i])
ans+=sum[b[i]]^=;
cout<<ans<<endl;
}
inline void cl(int bg,int ed){
if (b[bg]==){
b[bg]=ed;
ok[bg]=true;
}
else ok[bg]=false;
}
P1922 女仆咖啡厅桌游吧的更多相关文章
- 洛谷 P1922 女仆咖啡厅桌游吧
P1922 女仆咖啡厅桌游吧 题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的.” 小v:“全部都听!? ...
- luogu P1922 女仆咖啡厅桌游吧
题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的.” 小v:“全部都听!?” 妹妹:“嘻嘻嘻,你还是回答 ...
- [luoguP1922] 女仆咖啡厅桌游吧(奇奇怪怪的树形DP)
传送门 什么鬼的题? 代码 #include <cstdio> #include <cstring> #include <iostream> #define N 1 ...
- LuoguP1922 女仆咖啡厅桌游吧 (树形动态规划)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- 【团队项目选题】自选项目:桌游APP
由于我们团队的黄金点游戏结果是第二名,按理说是一定能选到一个自选项目的,所以以下只列出我们选择的自选项目 自选项目名称 桌游APP 暂定 (名字还没想好) 项目大致介绍 此APP集成了多种桌游,主 ...
- 「Luogu P5603」小O与桌游
题目链接 戳我 \(Solution\) 我们来分析题目. 实际上就是求一个拓扑序满足拓扑序的前缀最大值最多/最少 对于第一种情况,很明显一直选当前能选的最小的是最优的对吧.因为你需要大的尽可能多.用 ...
- Luogu P5603 小C与桌游【贪心+拓扑排序】
[Description]https://www.luogu.com.cn/problem/P5603 \(\;\) 题意可以简化为:一个不保证联通,n个点,m条边的DAG(有向无环图),构造一个拓扑 ...
- 树形DP详解+题目
关于树形dp 我觉得他和线性dp差不多 总结 最近写了好多树形dp+树形结构的题目,这些题目变化多样能与多种算法结合,但还是有好多规律可以找的. 先说总的规律吧! 一般来说树形dp在设状态转移方程时都 ...
- WereWolf项目 Postmortem
WereWolf项目 Postmortem (博客园的MarkDown编辑器好像有些问题,编号都显示1..) 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...
随机推荐
- android是32-bit系统还是64-bit系统
转自:http://www.cnblogs.com/pengwang/archive/2013/03/11/2954496.html 电脑CPU分32位和64位,这个我们都知道.用了这么长时间的and ...
- jQuery方法-queue()
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...
- centos8 安装vmware需要的内核头文件 kernel-headers.
centos8 安装vmware需要的内核头文件 kernel-headers. uname -r (查看内核版本) rpm -qa kernel-headers (查看kernel-headers版 ...
- 34. Thread类的常用方法
1.构造方法 Thread() 分配新的 Thread 对象. Thread(String name) 分配新的 Thread 对象并指定线程名字 2.方法 1)setName(String nam ...
- Java中的反射该如何使用?
1. 什么是反射 反射是一种功能强大且复杂的机制.Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性.对于任何一个对象,我们都能够对它的方法和属性进行调用.我们把这种 ...
- C/C++ 无法解析的外部符号解决方案
{ //0 类的成员函数没有实现就调用 //1 调用没有编译生成cpp 的函数 //2 没有加载lib //3 最重要的就是有声明无实现 }
- 阿里云重磅推出物联网设备身份认证Link ID²
2018年12月19日,阿里云宣布推出新版物联网设备身份认证Link ID²及物联网安全运营中心Link SOC,护航万物智联. 随着越来越多的设备连接到网络中,随之而来的安全问题越来越突出. ...
- kafk的数据消费快速的原因
kafka为什么消费数据很快呢? 1.数据的顺序读写 2.页缓存(操作系统层面) https://blog.csdn.net/gdj0001/article/details/80136364
- NOIp2018集训test-9-4
老张让我们2.5h考NOI%你题,喵喵喵? 因为今(我)天(实)的(在)题(太)鬼(弱)畜(了)了,我还只改了t1. Problem A. reorder 考试的时候大家都写了最长不降子序列,然后全员 ...
- 暑假集训test-8-29
今天瓜成一坨了. 瓜的说不出话来. 直接退役算了我. T1 傻逼题,但是我傻逼地敲了一个线段树合并,然后把空间炸了,只剩20分, 直接dfs维护子树大小,子树中最大最小值即可统计答案. //Achen ...