CSU-2172 买一送一

CSU-2172 买一送一

Description

ICPCCamp 有 n 个商店,用 1,?2,?…,?n 编号。对于任意 i?>?1,有从商店 \(p_i\) 到 i 的单向道路。 同时,商店 i 出售类型为 \(a_i\) 的商品。

Bobo 从商店 1 出发前往商店 i。他要在两个不同的商店购买商品(包括商店 1 和 i)。设他先购买的商品类型是 x,后购买的商品类型是 y,他用 \(f_i\) 表示不同的有序对 ?x,?y? 的数量。 求出 \(f_2,?f_3,?…,?f_n\) 的值。

  • 1?≤?n?≤?\(10^5\)
  • 1?≤?\(p_i\)?<?i
  • 1?≤?\(a_i\)?≤?n
  • n 的总和不超过 5?×?\(10^5\).

Input

输入文件包含多组数据,请处理到文件结束。

每组数据的第一行包含 1 个整数 n.

第二行包含 (n???1) 个整数 \(p_2,?p_3,?…,?p_n\).

第三行包含 n 个整数 \(a_1,?a_2,?…,?a_n\).

Output

对于每组数据输出 (n???1) 个整数表示 \(f_2,?f_3?…?f_n\).

Sample Input

3
1 2
1 2 3
3
1 1
1 2 3
4
1 2 3
1 3 2 3

Sample Output

1
3
1
1
1
3
5

Hint

对于第三个样例,当 i?=?4 时,可能的有序对 ?x,?y? 有 ?1,?2?,?1,?3?,?2,?3?,?3,?2?,?3,?3? 共 5 种。所以 \(f_4?=?5\).


题解

这个题是一道搜索题,一个点的有序对数目等于它上一个点的有序对数目+到目前为止出现过的商品总数-这个点上一次出现时的有序对数目(避免重复计算),我们用一个pre数组记录一下上一个该商品出现时的商品数目,用一个vis数组记录一下一个商品是否出现过,回溯一下就可以AC了

#include<bits/stdc++.h>
#define maxn 100050
using namespace std;
vector<int> G[maxn];
int a[maxn];
long long f[maxn];
int vis[maxn];
long long pre[maxn];
void dfs(int u, int fa, int cnt) {
    for (int i = 0; i < G[u].size(); i++) {
        int v = G[u][i];
        if (!vis[a[u]]) cnt++;
        vis[a[u]]++;
        f[v] = f[u] + cnt - pre[a[v]];
        int tmp = pre[a[v]];
        pre[a[v]] = cnt;
        dfs(v, u, cnt);
        vis[a[u]]--;
        if (vis[a[u]] == 0) cnt--;
        pre[a[v]] = tmp;
    }
}
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        memset(f, 0, sizeof(f));
        memset(vis, 0, sizeof(vis));
        for (int i = 0; i <= n; i++) {
            G[i].clear();
        }
        for (int i = 2; i <= n; i++) {
            int x;
            scanf("%d", &x);
            G[x].push_back(i);
        }
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
        }
        if (n == 1) continue;
        dfs(1, 0, 0);
        for (int i = 2; i <= n; i++) {
            printf("%lld\n", f[i]);
        }
    }
    return 0;
}
/**********************************************************************
    Problem: 2172
    User: Artoriax
    Language: C++
    Result: AC
    Time:576 ms
    Memory:17568 kb
**********************************************************************/

原文地址:https://www.cnblogs.com/artoriax/p/10351632.html

时间: 2024-08-30 17:39:19

CSU-2172 买一送一的相关文章

北风IT视频教程 元旦买一送一

辞旧迎新,年度盛典 活动规则: 1.凡是活动期间用户购买课程(合作课程以及套餐课程除外)均可享受买一送一,礼品课程随你挑: 2.套餐课程一律6折: 3.北风课程调查问卷采纳您最真实的课程需求,填写问卷50元.100元.500元.1000元学习卡送不停,问卷调查结束后赠送券将统一发至北风账号!http://dwz.cn/zc1Dx 咨询QQ:1840215592

为了【眼睛】拼了,意康绿全场钜惠,关注微信买一送一!~

您是否是电脑控.手机党.熬夜族.驾驶队的一员,也同样饱受环境污染.强力紫外线和各种辐射的困扰,模糊了清澈的心窗,渐失明察秋毫的锐利!!那么问题来了,有没有一种既健康又轻松的解决方法呢? 梦想还是要有的,万一实现了呢?机会就在眼前,不试试怎么知道?再犹豫,超值优惠就木有啦~~ 送爸妈?送亲人?送朋友?黑醋栗复合固体饮品拥有独一无二的神奇功效,保护您的心灵之窗!微信公众号搜索意康绿

公司给股票期权,我买还是不买?

关于股票期权的话题,公司给股票期权员工购买,我买还是不买呢? 我们从两个角度来谈吧,先从员工的角度,再从老板的角度. 如果你是员工: 关于期权,其实买不买的判断办法很简单,如果让你纠结和犹豫的话,就坚决不买就行了. 期权和股票这东西,老板给你买,并且认为这是公司给你的恩赐,而你要装着很感激而且还要去争取,这基本上就是扯淡和让人恶心,不鸟他就是了. 如果还要再公司呆上一段时间才走人,就做做表面功夫吧. 坚决不要买,买了就是变相交保证金,自己绑住自己. 如果你在华为.阿里等这些大公司,公司要卖期权和

系统思考小故事:买烟

甲去买烟,烟29元,但他没有火柴,跟店员说:"顺便送一盒火柴吧."店员没给. 乙去买烟,烟29元,他也没有火柴,跟店员说:"便宜一毛吧."最后,他用这一毛买了一盒火柴. 这是最简单的心理边际效应. 第一种:店主认为自己在一个商品上赚钱了,另一个没赚钱.赚钱感觉指数为1. 第二种:店主认为两个商品都赚钱了,赚钱指数为2.当然心理倾向第二种了. 看上去甲乙都去买烟,在说话的角度不一样,从系统思考的角度,人性结构在店员身上非常明显的体现,尤其是人性中厌恶损失,第一种对于店

2018 hncpc 部分题

A.字符画 签到 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2163 #include<bits/stdc++.h> using namespace std; int w; void go(){ for(int i=1;i<=w;i++) cout<<"."; } int main(){ cin>>w; cout<<"ooo"; go();

秒杀与促销的选择和设置

在此前的<亚马逊站内引流>系列文章中,小编已经将Skyla细分的亚马逊站内引流八大渠道(变体.广告.Feedback.Review.完美listing界面.促销.运输渠道和销量)中的"变体.广告.Feedback&Review.完美listing界面与运输渠道"六个渠道的具体操作整理成文. 本文作为亚马逊站内引流系列文章的完结篇,将详细介绍亚马逊上的促销与销量. 秒杀的具体操作 秒杀,也可以称之为销量,其具体有作用有哪些呢?根据目前亚马逊A9新算法,对于旧产品权重影

【转】毛虫算法&mdash;&mdash;尺取法

转自http://www.myexception.cn/program/1839999.html 妹子满分~~~~ 毛毛虫算法--尺取法 有这么一类问题,需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式,我管它叫毛毛虫算法,比较流行的叫法是"尺取法". 喏,就像图里的妹纸一样~ 还是举个栗子: Poj3061 给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度 输入 n = 1

李欣频经典文案整理(一)

https://www.douban.com/note/268353360/?type=like 海明威阅读海,发现生命是一条要花一辈子才会上勾的鱼.凡高阅读麦田,发现艺术躲在太阳的背后乘凉.弗洛伊德阅读梦,发现一条直达潜意识的秘密通道.罗丹阅读人体,发现哥伦布没有发现的美丽海岸线.加缪阅读卡夫卡,发现真理已经被讲完一半.在书与非书之间,我们欢迎各种可能的阅读者.                                                       ————进入诚品之门的文

2017联合办公洗牌关键词:生存、扩张、盈利、因地制宜_转

转自:http://www.iheima.com/zixun/2017/0206/161059.shtml "大众创业,万众创新",不只催生了千军万马的创新创业者,更衍生出联合办公这样独特的办公模式.这一办公模式从无到有,从最初单一的复制借鉴到今天品类繁多的百花齐放,已经进化成对创业者有着致命吸引力的办公地址选择. 粗略统计,截至2016年初,中国联合办公空间数量已经超过2300家. 福兮祸所依,在各式各样的联合办公野蛮生长的背后,可以预见的是市场优胜劣汰的残酷洗牌. 未来联合办公的发