2019牛客国庆集训派对day3 买一送一
题意:有n个点,n-1条单向边,每个点都销售一类商品
问从点1开始走,买第一样商品类型为x,买第二样商品类型为y,问不同有序对<x,y>的数量
解法:
col[i]表示这个点的商品类型
last[col[i]]表示从1到点i过程中,点i的商品类型上次出现的时候的点的父亲
vis[col[i]]表示从1到点i过程中,点i的商品类型经过次数
num[i]表示从1到点i过程中不同商品类型数量和
每次扫到新的点v时,(u为v的父亲) num[u] - num[last[col[v]]]就是需要更新的对数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 1e5 + ;
const int mod = 1e9 + ;
int num[M], vis[M], anss[M], ans, cnt, col[M], head[M], last[M];
struct node{
int next, to;
}edge[M];
void add_edge(int u, int v) {
edge[++cnt].next = head[u];
edge[cnt].to = v;
head[u] = cnt;
}
void dfs(int u, int sum, int ans) {
for(int i = head[u]; i; i = edge[i].next) {
int v = edge[i].to;
int t = ;
int lastt = last[col[v]];
vis[col[v]]++;
if(vis[col[v]] == ) num[v] = num[u] + ;
else num[v] = num[u];
t = num[u] - num[last[col[v]]];
last[col[v]] = u;
//printf("%d %d %d\n", v, col[v], last[col[v]]);
anss[v] = ans + t;
if(vis[col[v]] == ) dfs(v, sum + , ans + t);
else dfs(v, sum + , ans + t);
vis[col[v]]--;
last[col[v]] = lastt;
}
}
int main(){
int n;
while(~scanf("%d", &n)){
cnt = ;
memset(head, , sizeof(head));
for(int i = ; i <= n; i++) num[i] = , last[i] = , vis[i] = , anss[i] = ;
for(int i = ; i <= n; i++) {
int u;
scanf("%d", &u);
add_edge(u, i);
}
for(int i = ; i <= n; i++)
scanf("%d", &col[i]);
vis[col[]]++;
num[] = ;
dfs(, , );
// for(int i = 1; i <= n; i++) {
// printf("%d ", num[i]);
// }
// printf("\n");
for(int i = ; i <= n; i++) {
printf("%d\n", anss[i]);
}
}
return ;
}
/*
3
1 2
1 2 3
3
1 1
1 2 3
4
1 2 3
1 3 2 3
7
1 1 3 2 4 2
3 3 3 4 5 3 3
7
1 1 3 2 4 2
2 3 3 4 5 3 3
*/
2019牛客国庆集训派对day3 买一送一的更多相关文章
- 2019牛客国庆集训派对day3
E. Grid 大意: 给定$n\cdot m$个点的图, 初始无边, $q$个操作, $(1,a,b)$表示第$a$列到第$b$列全连起来, $(2,a,b)$表示把第$a$行到第$b$行全连起来, ...
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)
链接:https://ac.nowcoder.com/acm/contest/1099/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】
链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...
- 2019牛客国庆集训派对day7 A 2016
链接:https://ac.nowcoder.com/acm/problem/52800来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 2019牛客国庆集训派对day1(A, B E F K)
链接:https://ac.nowcoder.com/acm/contest/1099#question A:可知符合条件的图中间肯定存在一个由1构成的矩形,找到由1构成矩形的边界,判断出现的1的数量 ...
- 牛客国庆集训派对Day3 B Tree
Tree 思路: 树形dp 注意0不存在逆元,任何一个数乘以0就变成0了,就没有价值浪,所以要暴力转移 代码: #pragma GCC optimize(2) #pragma GCC optimize ...
- 牛客国庆集训派对Day3 I Metropolis
Metropolis 思路: 多源点最短路 只要两个不同源点的最短路相遇,我们就更新两个源点的答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3 ...
- 牛客国庆集训派对Day3 A Knight
Knight 思路: bfs打表找规律 如下图 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) ...
随机推荐
- ZYNQ笔记(4):PL触发中断
一.ZYNQ中断框图 PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的表格中可以看到中断向量的具体值.PL到PS部分一共有20个中断可以使用.其中4个是快速中断.剩余 ...
- Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装
首先说一下我的环境, 我是在windows 10 上面建了一个ubuntu18的虚拟机,同时由于某些原因 不受网络限制, 所以安装比较顺利. Install 1.安装并启用 Docker sudo ...
- ModbusTCP协议
简介 Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP. Modbus协议是一项应用层 ...
- OpenResty下载安装教程
原文链接:http://www.studyshare.cn/software/details/1174/0 一.OpenResty简介 OpenResty是一个全功能的 Web 应用服务器.它打包了标 ...
- Java之路---Day15(Collection类)
2019-11-01-22:09:09 目录 1.Collection集合的概念 2.Collection集合常用方法 3.Iterator迭代器 4.增强for 5.Collection常用工具类 ...
- iOS架构:MVVM设计模式+RAC响应式编程
https://cloud.tencent.com/developer/article/1117009 一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都 ...
- sap unix timestamp转换
之前和java做接口的时候就遇到过这个问题,对方的时间戳和SAP的时间戳是不同的. SAP的时间戳格式NNNNYYDD ZONE HHMMSS这样的一个数值. JAVA的时间戳是unix时间戳,是以1 ...
- 最强在线文件格式转换(支持200+文件格式如常用的PDF,DOCX,JPG,GIF,MP3,MP4,FLV,MOBI)(通用)
网站展示:http://www.alltoall.net/ 分类简洁 支持的所有文件格式展示: 单独展示文档转换: 单独展示PDF转换:
- prometheus学习系列十: Prometheus AlertManager配置文件说明
alertmanager配置文件说明 alertmanager是通过命令行标记和配置文件配置的,命令行标记配置不可变的系统参数,配置文件定义抑制规则.通知路由和通知接收器.可以通过官方提供的routi ...
- Linux 部署 YUM 仓库
本篇主要写了怎么搭建自定义的YUM源,在一个拥有大量本地网络的主机环境中,可以减少对外网的依赖. Server 安装 vsftp 包 [root@server ~]# yum install vsft ...