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) ...
随机推荐
- 一个萝卜一个坑#我的C坑_两局变量
前面的笔记慢慢补 全局变量和局部变量的区别: 1.首字母 尽量不用全局变量原因: 1.占内存 2.降低通用性和可靠性 3.降清晰度 若在同一源文件中,全局变量和局部变量同名,记住很重要的一条:实参决定 ...
- WebAPI中路由参数中包含字符-点“.”
请求url都是类似:/api/area/province.list 我们默认建立的Asp Net WebApi 服务时,如果请求url包含“.”,则返回404错误. 解决办法:需要在web.confi ...
- 图解再谈ssh port forwarding-ssh隧道技术
https://www.ramkitech.com/2012/04/how-to-do-ssh-tunneling-port-forwarding.html https://www.cnblogs.c ...
- PAT 1003我要通过!
PAT 1003 我要通过! 答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出&qu ...
- 如何在Linux中复制文档
在办公室里复印文档过去需要专门的员工与机器.如今,复制是电脑用户无需多加思考的任务.在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘的时候. 数字实体复制 ...
- English--七种句子成分概述
English|七种句子成分概述 现代英语的语法是非常严谨的,英语句子的成分与汉语的句子成分有很大的区别.所以在学习语法的开始,需要上文讲到的句型作为骨架支撑,还需要明白句子的成分是什么,以及个各自的 ...
- JavaWeb第一天--HTML
HTML HTML简介 HTML(Hyper TextMarkupLanguage) 超文本标记语言. 超文本: 超越了文本仅仅展示信息的功能范畴,泛指:图片.有样式的文字.超链接. 标记: 标签. ...
- 常用模块 - logging模块
一.简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块,由标准库模块提供日志记录API的关键好处是所有Python ...
- Webpack如何配置sourceMap
前言:在写这篇文章之前,我必须要吐槽一下webpack了.特别喜欢更新版本,更新就算了,文档还跟不上.文档真的让人迷惑了,大爷的. 背景:由于我正在写sourceMap反向定位源码的功能,所以最近需要 ...
- 转摘jemeter学习-连接数据库之jdbc请求
JMETER连接数据库 mysql下载地址:https://dev.mysql.com/downloads/connector/j/ mysql连接器根据语言选择/J,用的是Mac,选择下载.tar. ...