首页 > 其他分享 >牛客小白月赛 64 D题

牛客小白月赛 64 D题

时间:2023-01-04 21:47:03浏览次数:34  
标签:有向图 idx int ++ ne dfs 牛客 64 小白月赛

https://ac.nowcoder.com/acm/problem/247496

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 3e5 + 10;
 5 
 6 typedef long long LL;
 7 //本题的思路就是在与反转操作的理解, 以及这种操作其实等价于将树任意修改, 具体为什么请看视频
 8 int h[N], e[N], w[N], ne[N], idx;
 9 int n, s[N];
10 LL res;//注意数据范围, 经常犯错误, 下一次注意一下
11 
12 int dfs(int u) {
13     s[u] ++ ;
14     for (int i = h[u]; i != -1; i = ne[i]) {
15         int j = e[i];
16         s[u] += dfs(j);
17     }
18     return s[u];
19 }//这里如果用有向图的方式来存储的话就不用bool st[]了
20 
21 void add(int a, int b) {
22     e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
23 }
24 
25 int main() {
26     cin >> n;
27     for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);
28     sort(w + 1, w + 1 + n);
29     //     for (int i = 1; i <= n; i ++ ) printf("%d ", w[i]);
30     memset(h, -1, sizeof h);
31     for (int i = 1; i <= n - 1; i ++ ) {
32         int t;
33         scanf("%d", &t);
34         add(t, i + 1);//注意这里用有向图的存储方式, 不然会tle
35     }
36     dfs(1);
37     sort(s + 1, s + 1 + n);
38     //     for (int i = 1; i <= n; i ++ ) printf("%d ", s[i]);
39     for (int i = 1; i <= n; i ++ ) res += (LL)s[i] * w[i];
40 
41     cout << res << endl;
42     return 0;
43 }

 

 

关键点是想明白为什么反转操作等价于对权值任意排列 , 然后就是每一个结点的size怎么用dfs求出来 , 这一道题我用y总的方法发现用无向图的存储和遍历方式会超时 , 可是用有向图的方法就不会出问题

就很奇葩

标签:有向图,idx,int,++,ne,dfs,牛客,64,小白月赛
From: https://www.cnblogs.com/llihaotian666/p/17026073.html

相关文章

  • 牛客进阶题目4:输入序列不连续的序列检测
    跟上一题基本类似,多了个valid判定当前输入数据是否有效`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputdata, inputdata_valid, outpu......
  • 《安富莱嵌入式周报》第291期:分分钟设计数字芯片,单片机版JS,神经网络DSP,microPLC,FatFS
     视频版:​​​https://www.bilibili.com/video/BV1Dd4y1b74x​​1、英飞凌推出双核M7+M0芯片XMC7000,8MBFlash,1MBRAM,2.7-5.5宽电压,10个CANFD,20通道LIN-UART,96通道12bitA......
  • /usr/lib64改名字风波
    注:本文描述请勿模仿,仅限万一遇到这种情况一试。一不小心做了一个操作:1cd/usr2mvlib64lib64-bak然后奇异的发现:cp不能用了!ls也不能用了……提示信息如下:-bas......
  • C++ invoks Python ~ int64_t and __int64
     #include<Python.h>intmain(){return}利用如上代码(cpppython.cc)测试C++调用python(version2.6.2),g++编译出现如下错误:通过错误可知__int64不是C++的支持的整型类......
  • Windows xp 64 bit
    WindowsXPProfessionalx64EditionwithSP2-VL(English) 详细信息文件名en_win_xp_pro_x64_with_sp2_vl_X13-41611.isoSHA1CD9479E1DBAD7F26B8BDCF97E4AA71CBB8DE......
  • 牛客小白月赛 64 C题
    https://ac.nowcoder.com/acm/contest/50044/C 1#include<bits/stdc++.h>2usingnamespacestd;3//贪心构造我认为思路是其一,然后模拟这个过程还是比较重......
  • leetcode-645. 错误的集合
    645.错误的集合-力扣(Leetcode)又用了哈希表,又用了数学计算,看题解有个位运算看不太懂funcfindErrorNums(nums[]int)[]int{m:=make(map[int]struct{},len(nu......
  • leetcode-643. 子数组最大平均数 I
    643.子数组最大平均数I-力扣(Leetcode)滑动窗口,判断好边界条件即可funcfindMaxAverage(nums[]int,kint)float64{begin,end:=0,k-1ifend>=len(n......
  • 牛客进阶题目3:不重叠序列检测
    还是移位寄存器,加一个计数器来限制周期题目要求状态机,懒得画了,移位寄存器可根据时序图直接写`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, i......
  • NC25064 [USACO 2007 Mar G]Ranking the Cows
    题目链接题目题目描述EachofFarmerJohn'sNcows(1≤N≤1,000)producesmilkatadifferentpositiverate,andFJwouldliketoorderhiscowsaccording......