【Code Chef】April Challenge 2019

Subtree Removal

很显然不可能选择砍掉一对有祖先关系的子树。令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$;如果$i$被砍,那就是$-x$。取个$max$就好了。

时间复杂度$O(n)$。

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;

int tc, n, xx;
int a[N];
vector<int> g[N];
long long f[N];

void Dfs(int x, int ft) {
  f[x] = a[x];
  for (int i = 0; i < g[x].size(); ++i) {
    int v = g[x][i];
    if (v == ft) continue;
    Dfs(v, x);
    f[x] += f[v];
  }
  f[x] = max(f[x], -(long long)xx);
}

int main() {
  scanf("%d", &tc);
  for (; tc--; ) {
    scanf("%d%d", &n, &xx);
    for (int i = 1; i <= n; ++i) {
      scanf("%d", &a[i]);
    }
    for (int i = 1, x, y; i < n; ++i) {
      scanf("%d%d", &x, &y);
      g[x].push_back(y);
      g[y].push_back(x);
    }

    Dfs(1, 0);
    printf("%lld\n", f[1]);

    // remember to clear up
    for (int i = 1; i <= n; ++i) {
      g[i].clear();
    }
  }

  return 0;
}

Playing with Numbers

在模$m$意义下,$a * k(k \in \mathbb{N})$能表示的最大的数就是$m - (a, m)$。容易推导出一个叶子的答案就是$m_i - (m, a_{b_1}, a_{b_2}, ... , a_{b_w})$,其中$b$表示$i$号点的祖先链。

时间复杂度$O(nlogn)$。

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;

int tc, n;
vector<int> g[N];
long long a[N], m[N], gcd[N];

void Dfs(int x, int ft) {
  for (int i = 0; i < g[x].size(); ++i) {
    int v = g[x][i];
    if (v == ft) continue;
    gcd[v] = __gcd(gcd[x], a[v]);
    Dfs(v, x);
  }
}

int main() {
  scanf("%d", &tc);
  for (; tc--; ) {
    scanf("%d", &n);
    for (int i = 1, x, y; i < n; ++i) {
      scanf("%d%d", &x, &y);
      g[x].push_back(y);
      g[y].push_back(x);
    }
    for (int i = 1; i <= n; ++i) {
      scanf("%lld", &a[i]);
    }
    for (int i = 1; i <= n; ++i) {
      scanf("%lld", &m[i]);
    }
    gcd[1] = a[1];
    Dfs(1, 0);

    for (int i = 2; i <= n; ++i) {
      if (g[i].size() == 1) {
        long long d = __gcd(gcd[i], m[i]);
        printf("%lld ", m[i] - d);
      }
    }
    printf("\n");

    // remember to clear up
    for (int i = 1; i <= n; ++i) {
      g[i].clear();
    }
  }

  return 0;
}

原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/10712425.html

时间: 2024-10-08 16:39:46

【Code Chef】April Challenge 2019的相关文章

关于注释【code templates】如何导入本地注释文件

关于如何导入本地注释文件 [code_templates.xml]   请看操作方式 下面是code templates文件的内容 注意  把文件中的 @@@@@@@@@@@@@@@  替换为  作者名称即可   各注释详细可在eclipse工具中修改 <?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinse

【UVALive - 5131】Chips Challenge(上下界循环费用流)

Description A prominent microprocessor company has enlisted your help to lay out some interchangeable components(widgets) on some of their computer chips. Each chip’s design is an N × N square of slots. Oneslot can hold a single component, and you ar

CodeChef April Challenge 2019题解

传送门 \(Maximum\ Remaining\) 对于两个数\(a,b\),如果\(a=b\)没贡献,所以不妨假设\(a<b\),有\(a\%b=a\),而\(b\%a<a\).综上,我们可以发现答案就是严格次大值 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R i

【Code::Blocks】windows 环境下编译 Code::Blocks(已修正)

Code::Blocks 在2012-11-25发布了最新的12.11版本,相比上一个版本(10.05),Code::Blocks 进行了许多改进和更新(Change log). 引用 Wikipedia:Code::Blocks: Code::Blocks是一个免费.开源.跨平台的IDE,使用C++开发,并且使用wxWidgets做为GUI函式库.Code::Blocks使用了插件架构,其功能可以使用插件自由地扩充.目前, Code::Blocks主要针对开发C/C++程式而设计. Code:

【code block】局部代码块+构造代码块+静态代码块

1.局部代码块 位置:位于类的方法中 表示方法:{} 作用:控制变量的生命周期,减少内存消耗 demo: public class LocalCode { public static void main(String [] args){ int y = 10; { int x = 20; System.out.println(x); } System.out.println(y);//运行到此时x变量已被垃圾收集 } } 2.构造代码块 位置:位于类中 表示方法:{} 作用:用于给每个对象进行初

【code vs】 2780 ZZWYYQWZHZ

2780 ZZWYYQWZHZ 题目描述 Description 可爱的小管在玩吹泡泡.忽然,他想到了一种排序....... 输入描述 Input Description 第一行输入n,表示有n个数.(n>=20) 以下n行输入n个数,表示要排序的数(数字长度不超过200). 输出描述 Output Description 有n行,即这些数从小到大的排序. 样例输入 Sample Input 5 1 2 3 4 5 样例输出 Sample Output 1 2 3 4 5 数据范围及提示 Dat

【codeforces 235E】 Number Challenge

http://codeforces.com/problemset/problem/235/E (题目链接) 题意 给出${a,b,c}$,求${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)}$ Solution 莫比乌斯反演,推啊推式子. 有这样一个公式,就是约数个数和那道题的推广吧.$${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^c[gcd(

【新题】ocp 062 2019年考试新题-3

3.A database is open read write and the instance has multiple sessions some of which have active transactions. You execute this command: SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; Which three are true about the active transactions? A) They may cont

【Code Tools】AB性能测试工具(二)

一.测试Get请求 1.每次并发请求10个,总共1000个请求 ab -n 1000 -c 10 https://www.baidu.com/ 2.指定Header参数 通过-H来指定 ab -n 1000 -c 10 -H 'Accept-Encoding: gzip' -H 'storeId: 12' https://www.baidu.com/?a=1&b=2 二.测试Post请求 ab -n 1000 -c 10 -p "post.txt" -T "appli