[牛客] [#1108 J] [树形结构] 买一送一
2019牛客国庆集训派对day3
链接:https://ac.nowcoder.com/acm/contest/1108/J
来源:牛客网
题意
ICPCCamp 有 n 个商店,用 $1,2,...,n$ 编号。对于任意 i > 1,有从商店 $p_i$ 到 i 的单向道路。
同时,商店 i 出售类型为 $a_i$ 的商品。
Bobo 从商店 1 出发前往商店 i。他要在两个不同的商店购买商品(包括商店 1 和 i)。设他先购买的商品类型是 x,后购买的商品类型是 y,他用 $f_i$ 表示不同的有序对 $\langle x, y \rangle$ 的数量。
求出 $f_2, f_3, \dots, f_n$ 的值。
思路
由于每个点只有一个入度,所以可以转化为根为1的树形结构。
那么问题就转化为,从根$1$ 到 $i$ 的路径上不同有序对的个数。
// #pragma GCC optimize(2)
// #pragma GCC optimize(3)
// #pragma GCC optimize(4)
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert>
//#include <unordered_set>
//#include <unordered_map>
// #include<bits/extc++.h>
// using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+; template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} /**********showtime************/
const int maxn = 1e5+;
int p[maxn], a[maxn];
ll f[maxn];
int sum,kind[maxn],cnt[maxn];
vector<int>mp[maxn]; ll add(int col) {
ll res = ;
res = sum - kind[col];
if(cnt[col] == ) res ++;
else if(cnt[col] == ) sum ++;
cnt[col] ++;
kind[col] = sum;
return res;
}
void del(int col) {
cnt[col] --;
if(cnt[col] == ) sum--;
} void dfs(int u, int fa, int dp) {
f[u] = f[fa];
int yk = kind[a[u]];
f[u] += add(a[u]); for(int v : mp[u]) {
dfs(v, u, dp+);
} del(a[u]); kind[a[u]] = yk;
}
int main(){
int n;
while(~scanf("%d", &n)) { for(int i=; i<=n; i++) mp[i].clear(), f[i] = , kind[i] = ;
sum = ; for(int i=; i<=n; i++) {
scanf("%d", &p[i]);
mp[p[i]].pb(i);
}
for(int i=; i<=n; i++) scanf("%d", &a[i]); dfs(, , ); for(int i=; i<=n; i++) printf("%lld\n", f[i]);
}
return ;
}
[牛客] [#1108 J] [树形结构] 买一送一的更多相关文章
- 2019牛客国庆集训派对day3 买一送一
题目链接: 题意:有n个点,n-1条单向边,每个点都销售一类商品 问从点1开始走,买第一样商品类型为x,买第二样商品类型为y,问不同有序对<x,y>的数量 解法: col[i]表示这个点的 ...
- [牛客] [# 1108 E] Grid
2019牛客国庆集训派对day3 链接:https://ac.nowcoder.com/acm/contest/1108/E来源:牛客网 题意 在一个$10 ^ 9 * 10 ^ 9$ 的方格中,每次 ...
- 关于牛客网C语言结构体位域(bit-fields)的一道题
题目链接地址: https://www.nowcoder.com/questionTerminal/f4e20747a2dd4649bac0c028daa234f4 来源:牛客网 低地址字节 Byte ...
- 牛客网PAT练习场-到底买不买
题目地址:https://www.nowcoder.com/pat/6/problem/4065 题意:用数组统计好字符,最后进行相减,最后进行统计 /** * *作者:Ycute *时间:2019- ...
- 牛客 203B tree(树形dp)
大意: 给定树, 对于每个节点, 求包含该节点的连通子集数. 显然有$dp[x]=\prod (dp[y]+1), ans[x]=(\frac{ans[fa[x]]}{dp[x]+1}+1)dp[x] ...
- 牛客 201 J Princess Principal (括号, 栈模拟)
大意: 给定序列$a$, $a_i$为偶数代表第$\frac{a_i}{2}$种左括号, 否则为第$\frac{a_i-1}{2}$种右括号. 询问区间是否是合法括号序列. #include < ...
- 牛客小白月赛13 小A买彩票 (记忆化搜索)
链接:https://ac.nowcoder.com/acm/contest/549/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 【牛客】乃爱与城市拥挤程度 — 树形dp,up and down
我太难了 这题做得我要死了,来来回回写了大概八九个小时 错误的原因要么是快速幂写错(一生之敌,要么是忘取模爆\(longlong\)变负数\(QAQ\) \(update\) \(2019.11.13 ...
随机推荐
- DevOps - Scrum
1 - DevOps与敏捷开发 在采用敏捷开发的情况下,所有成员都对服务和产品负责,理解彼此的业务,符合DevOps的组织和文化. 以商业需求为核心,在较短期间内确定开发方针,并持续进行改善,从而逐步 ...
- sh脚本实战
做了什么东西还是要尽快移动到博客上,不然回头看自己写的东西已经看不懂了... 凭着回忆+搜资料,把当初写sh脚本的过程写上来. 首先新建一个.sh文件,用vim就可以 在sh的第一行,写上 #!/bi ...
- 问题 1014: [编程入门]阶乘求和python):(本地测试正确;但提交不对!!??)求教
问题 1014: [编程入门]阶乘求和 时间限制: 1Sec 内存限制: 128MB 提交: 27629 解决: 5450 题目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数 ...
- 用xcode打包完成,出现的Archive界面怎么打开?
要出现这个界面 只需在xcode界面进入windows 的下拉菜单Organizer
- Spring MVC 异步请求 Callable
对于有的请求业务处理流程可能比较耗时,比如长查询,远程调用等,主线程会被一直占用,而tomcat线程池线程有限,处理量就会下降 servlet3.0以后提供了对异步处理的支持,springmvc封装了 ...
- pubwin2009 备份文件恢复
local_db.DBBak 恢复注意: 1.先安装好全新server -> 用SQLManager连接数据库 连接时右键编辑 SQLSERVER注册属性 默认sql连接 帐号netcafe ...
- jmeter—获取当前时间(年、月、日),往前/往后n天
import java.util.Calendar; Calendar cal = Calendar.getInstance(); int day = cal.get(Calendar.DATE); ...
- HTML笔记(三) 表格和列表
本篇记录表格 (table) 和有序列表 (ordered list) \ 无序列表 (unordered list) 的部分用法 1.表格table 表格标签 使用 <table> 定义 ...
- PHP 调用shell命令
可以使用的命令: popenfpassthrushell_execexecsystem 1.popen resource popen ( string command, string mode ) 打 ...
- ideal中运行manven常用操作
ideal中对项目打包,输入命令如下图所示: clean install -Dmaven.test.skip=true