题目链接:

题意:有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 买一送一的更多相关文章

  1. 2019牛客国庆集训派对day3

    E. Grid 大意: 给定$n\cdot m$个点的图, 初始无边, $q$个操作, $(1,a,b)$表示第$a$列到第$b$列全连起来, $(2,a,b)$表示把第$a$行到第$b$行全连起来, ...

  2. 2019牛客国庆集训派对day5

    2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...

  3. 2019 牛客国庆集训派对day1-C Distinct Substrings(exkmp+概率)

    链接:https://ac.nowcoder.com/acm/contest/1099/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  4. 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】

    链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...

  5. 2019牛客国庆集训派对day7 A 2016

    链接:https://ac.nowcoder.com/acm/problem/52800来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  6. 2019牛客国庆集训派对day1(A, B E F K)

    链接:https://ac.nowcoder.com/acm/contest/1099#question A:可知符合条件的图中间肯定存在一个由1构成的矩形,找到由1构成矩形的边界,判断出现的1的数量 ...

  7. 牛客国庆集训派对Day3 B Tree

    Tree 思路: 树形dp 注意0不存在逆元,任何一个数乘以0就变成0了,就没有价值浪,所以要暴力转移 代码: #pragma GCC optimize(2) #pragma GCC optimize ...

  8. 牛客国庆集训派对Day3 I Metropolis

    Metropolis 思路: 多源点最短路 只要两个不同源点的最短路相遇,我们就更新两个源点的答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3 ...

  9. 牛客国庆集训派对Day3 A Knight

    Knight 思路: bfs打表找规律 如下图 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) ...

随机推荐

  1. VUE控件 VueTreeselect 参数options的数据转换

    VueTreeselect 控件 <Treeselect :options="options" :normalizer="normalizer" plac ...

  2. Reliable Multicast Programming(PGM)协议

    Reliable Multicast Programming (PGM)实际通用可靠多播协议,在某种程度上保证多播的可靠性.是IP上层协议,和TCP还有UDP同级,工作在传输层. 在组播传输视频项目中 ...

  3. 微信小程序路径表达式解析规则

    小程序 setData 方法支持路径表达式来设置属性,例如 setData({"x.y.z": 1}). 微信官方没有公布路径表达式的语法规则及解析规则,本文所描述的路径表达式解析 ...

  4. NOI2019网络同步赛游记

    我发的邮件**f没收到,后来去专门询问才整到一个名额(估计是嫌我太菜,参加了也是垫底) day -1 上午写了到类似随机游走的高斯消元期望dp,然后颓颓颓 下午打洛咕月赛.T1一直50pts,后来才知 ...

  5. java中什么是抽象类(abstract)

    一.什么是抽象类 由abstract修饰的方法叫抽象方法:由abstract修饰的类叫抽象类.抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构 ...

  6. ML学习笔记之LATEX数学公式基本语法

    作者:@houkai本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/3399646.html 0x00 概述 TEX 是Donald E. Knuth ...

  7. MySQL数据类型之BLOB与TEXT及其最大存储限制

    https://blog.csdn.net/q3dxdx/article/details/51014357 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  8. SAP T CODE : Description (Program)

    SAP T CODE : Description (Program) V : Quickstart RKCOWUSL (RKCOWUSL)V+01 : Create Sales Call (SAPMV ...

  9. bootstrap-switch使用,small、mini设置

    1.首先需要引用https://www.bootcss.com/p/bootstrap-switch/. bootstrap-switch插件库 2.先引用jquery文件,在引用bootstrap. ...

  10. C#读写设置修改调整UVC摄像头画面-对比度

    有时,我们需要在C#代码中对摄像头的对比度进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄 ...