P1922 女仆咖啡厅桌游吧

题目背景

小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧。

妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的。”

小v:“全部都听!?”

妹妹:“嘻嘻嘻,你还是回答问题吧!”

于是小v为了自己一天的幸福,来向你求助。

题目描述

小v所在的世界被规划成了树形结构,每一个节点上都可以建一个女仆咖啡厅或者桌游吧或者什么都不建。在确定点1为根节点之后,规划局要求:对于每一个非叶子的节点i,设它子树(包括自己)中所有的女仆咖啡厅的数量为cafe[i],桌游吧数目为table[i],都有cafe[i]等于table[i]。

妹妹的问题是:这颗树最多能放多少个女仆咖啡厅。

输入输出格式

输入格式:

第一行,一个正整数N

第二至N行,每行两个正整数ui,vi,表示vi,ui有一条边。

输出格式:

只有一行,最多能放的女仆咖啡厅的个数。

输入输出样例

输入样例#1: 复制

5
1 2
2 3
3 4
2 5
输出样例#1: 复制

2

说明

对于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 女仆咖啡厅桌游吧的更多相关文章

  1. 洛谷 P1922 女仆咖啡厅桌游吧

    P1922 女仆咖啡厅桌游吧 题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的.” 小v:“全部都听!? ...

  2. luogu P1922 女仆咖啡厅桌游吧

    题目背景 小v带萌萌的妹妹去玩,妹妹想去女仆咖啡馆,小v想去桌游吧. 妹妹:“我问你个问题,答不对你就做我一天的奴隶,答对了就今天我就全部听你的.” 小v:“全部都听!?” 妹妹:“嘻嘻嘻,你还是回答 ...

  3. [luoguP1922] 女仆咖啡厅桌游吧(奇奇怪怪的树形DP)

    传送门 什么鬼的题? 代码 #include <cstdio> #include <cstring> #include <iostream> #define N 1 ...

  4. LuoguP1922 女仆咖啡厅桌游吧 (树形动态规划)

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  5. 【团队项目选题】自选项目:桌游APP

    由于我们团队的黄金点游戏结果是第二名,按理说是一定能选到一个自选项目的,所以以下只列出我们选择的自选项目 自选项目名称 桌游APP   暂定 (名字还没想好) 项目大致介绍 此APP集成了多种桌游,主 ...

  6. 「Luogu P5603」小O与桌游

    题目链接 戳我 \(Solution\) 我们来分析题目. 实际上就是求一个拓扑序满足拓扑序的前缀最大值最多/最少 对于第一种情况,很明显一直选当前能选的最小的是最优的对吧.因为你需要大的尽可能多.用 ...

  7. Luogu P5603 小C与桌游【贪心+拓扑排序】

    [Description]https://www.luogu.com.cn/problem/P5603 \(\;\) 题意可以简化为:一个不保证联通,n个点,m条边的DAG(有向无环图),构造一个拓扑 ...

  8. 树形DP详解+题目

    关于树形dp 我觉得他和线性dp差不多 总结 最近写了好多树形dp+树形结构的题目,这些题目变化多样能与多种算法结合,但还是有好多规律可以找的. 先说总的规律吧! 一般来说树形dp在设状态转移方程时都 ...

  9. WereWolf项目 Postmortem

    WereWolf项目 Postmortem (博客园的MarkDown编辑器好像有些问题,编号都显示1..) 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...

随机推荐

  1. xinetd - 扩展的互联网服务守护进程

    总览 SYNOPSIS xinetd [options] 描述 DESCRIPTION xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序.与在系统初始化时启动这些服务器,让它们 ...

  2. Go学习笔记:Linux下安装Go语言

    CentOS7.6安装Go-1.12.9版本 1. 下载安装包到当前目录下> wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz2 ...

  3. tomcat+apache+jk

    安装JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html安装 rpm ...

  4. javascript--判断语句

    1.if...else.. if(m===1){ console.log('1') }else{ console.log('X') } 一般if 里面采用类型全等的运算符. 2.switch var ...

  5. Android Activity XML配置

    <activity android:name="xxxActivity" android:configChanges="keyboard|keyboardHidde ...

  6. Android SDK 环境变量配置

    ANDROID_HOME = D:\Package\android-sdk-windows 在path 中加入 %ANDROID_HOME%\tools 和 %ANDROID_HOME%\platfo ...

  7. Bootstrap快速入门并且建立常用模板

    对于移动端,能够快速搭建网站,操作相对简单 ,更容易掌握,这篇文章就介绍一下BootStrap 一  什么是Bottstrap 一个前端开发的框架,Bootstrap,来自 Twitter,是目前很受 ...

  8. PHP headers_list() 函数

    定义和用法 headers_list() 函数返回已发送的(或待发送的)响应头部的一个列表. 该函数返回包含报头的数组. 语法 headers_list() 提示和注释 提示:如需确定是否已发送报头, ...

  9. 【SPOJ DQUERY】区间数字统计

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 因为区间的端点移动一个单位的话,只会涉及到一个元素的增多或减少. 因此可以用莫队算法来解决. 只需要开一个数组(大小1百万),用下标来快速检索 ...

  10. Android客户端转换php服务端获取的时间戳的转换

    今天在用JSON获取后台的数据的时候,发现一个奇怪的现象就是返回来的时间戳都是1970年这样的,很是纠结,最后发现时php和Java中时间的格式不一样造成的,所以我们本地客户端要做一个转换: /** ...