首页 > 其他分享 >NOIP2024 加赛 8

NOIP2024 加赛 8

时间:2024-11-27 20:24:22浏览次数:6  
标签:int num maxN ans 加赛 define NOIP2024 mod

骗你的,没写。

不过这场分比较高,前三道切的都挺顺,T4 也拿了暴力分。

T3 和题解的处理办法不太一样,具体就是没有统计每条边的贡献,树上 DP 求的是子树内的答案,处理修改的时候也不一样。

就挂个代码吧。

#include <bits/stdc++.h>

using namespace std;

#define int long long
using ubt = long long;
using uubt = unsigned long long;
#define vec vector
#define eb emplace_back
#define bg begin
#define emp emplace
#define mkp make_pair
#define fi first
#define se second
using pii = pair<int, int>;
const int inf = 1e9;

const int maxN = 5e5 + 7;
const int mod = 998244353;
const int I = 499122177;

int n, m;

bool is[maxN];
ubt num[maxN], tot[maxN], f[maxN];

vec<pii> g[maxN];

int snum[maxN], snum2[maxN];

void dfs(int x, int fa) {
  num[x] = is[x];
  f[x] = tot[x] = 0;
  for (auto &[to, w] : g[x]) {
    if (to == fa) continue;
    dfs(to, x);
    f[x] += f[to] + num[x] * tot[to] % mod + w * num[x] * num[to] % mod + num[to] * tot[x] % mod;
    f[x] %= mod;
    num[x] += num[to];
    tot[x] += tot[to] + w * num[to] % mod;
    tot[x] %= mod;

    snum[x] += num[to];
    snum2[x] += num[to] * num[to] % mod;
    snum2[x] %= mod;
  }
}

int ans;

signed main() {
  freopen("sakuya.in", "r", stdin);
  freopen("sakuya.out", "w", stdout);

  cin.tie(nullptr)->sync_with_stdio(false);

  cin >> n >> m;
  for (int i = 1; i < n; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    g[u].eb(v, w);
    g[v].eb(u, w);
  }
  for (int i = 1; i <= m; i++) {
    int a;
    cin >> a;
    is[a] = true;
  }
  dfs(1, 0);
  ans = f[1];

  auto ksm = [](int a, int b) {
    int res = 1;
    while (b) {
      if (b & 1) res = res * a % mod;
      a = a * a % mod;
      b >>= 1;
    }
    return res;
  };
  auto M = ksm(m, mod - 2) * 2 % mod;

  int Q;
  cin >> Q;
  while (Q--) {
    //cerr << '\n';
    int x, k;
    cin >> x >> k;
    
    ans += (snum[x] * snum[x] % mod - snum2[x] + mod) * k % mod;
    ans %= mod;
    if (is[x]) {
      ans += snum[x] * k % mod;
      ans %= mod;
      ans += (m - num[x]) * k % mod;
      ans %= mod;
    }
    ans += snum[x] * (m - num[x]) % mod * k % mod * 2 % mod;
    ans %= mod;

    if (ans < 0) ans += mod;
    cout << ans * M % mod << '\n';
  }
}

标签:int,num,maxN,ans,加赛,define,NOIP2024,mod
From: https://www.cnblogs.com/ccxswl/p/18573039

相关文章

  • [75] (NOIP集训) NOIP2024 加赛 8
    A.flandre我的做法是,所有数离散化之后扔进桶里,去枚举选择\([i,+\infty)\)内的数的贡献,在所有的\(i\)里取一个最大值作为答案lbtl指出可能存在最优答案是选择\([i+1,+\infty)\)内的所有数与值为\(i\)的部分数的数据和lbtl交涉后尝试构造一组相同元素只选后一半的数据......
  • NOIP2024加赛8
    状态很不好,恼了。虚拟机太卡了,根本交不上去。flandre发现选取的肯定是从大到小排序后的一个后缀,然后就做完了,时间复杂度\(O(n\logn)\)。点此查看代码#include<bits/stdc++.h>usingnamespacestd;#definerep(i,s,t,p)for(inti=s;i<=t;i+=p)#definedrep(i,s,t,p......
  • 多校A层冲刺NOIP2024模拟赛26 && G
    多校A层冲刺NOIP2024模拟赛26&&GT1随机游走考虑到达一个点后,我们该往他的那个儿子走,简单膜一下只有两个儿子的样例后发现条件是$\frac{w_i}{v_i}$越小越优先,其中$w_i$表示他到父亲的边权,$v_i$表示他的点权,然后尝试推广,膜个稍微大点的样例发现完全是通用的,此时......
  • Time Stop#NOIP2024/GDUTCPC
    重要声明:本文章从2024.11.2716:12开始落笔,故cnblogs平台显示的上传时间会在NOIP2024比赛之前。本文章作者不存在任何以各类非合法渠道提前获取NOIP2024比赛题目的可能,同时也没有将该想法实现对应的资源或权力。请各位读者作证,并请相关组织明察。Day-3/2024.11.27这......
  • NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛26
    前言点击查看代码《看得最远的地方》你是第一个发现我越面无表情越是心里难过所以当我不肯落泪地颤抖你会心疼的抱我在胸口你比谁都还了解我内心的渴望比表面来得多所以当我跌断翅膀的时候你不扶我但陪我学忍痛我要去看得最远的地方和你手舞足蹈聊梦想像......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛26
    Rank有点唐A.随机游走签。重要的就后两句话。题意由此转化成:到每一个节点时,先后遍历其所有子节点的子树,使得\(\sumt_i\timesw_i\)最小。提前dfs一遍处理出便利完某棵子树所需要的总时间和子树总价值,容易发现对于两个子节点的子树来说,全部遍历完所需总时间是一样的,......
  • 多校A层冲刺NOIP2024模拟赛26
    多校A层冲刺NOIP2024模拟赛26\(T1\)A.随机游走\(100pts/100pts\)在树上做临项交换即可。点击查看代码structnode{llnxt,to,w;}e[500010];llhead[500010],v[500010],siz[500010],sum[500010],cnt=0,ans=0,tim=0;structquality{llsumt,siz,to,w;};......
  • NOip2024前最后一周训练日记
    也是有了博客了,上周花了点时间稍微搭了一下界面。闲话初三生,目前为止初中去过三个学校。第一个学校。这时基本没怎么沾OI,只是靠机构和自学了解的,因此前两年的CSP都基本是不好。记得初一下的时候,GF组织算法冬令营,原本想着打比赛打的好一点去进本部校队的,但我发现了甚至零基......
  • 2024.11.25 NOIP2024模拟赛
    挂了若干分。赛时T1赛时开了\(T1\),最开始都没有往正解去想,当时想着$\Deltay$是可以枚举的范围,于是我就先枚举了公差,之后再把处于同一个系中的数绑一块,然后我加了个所谓的\(n^2\)优化,但其实根本没用,应为肯定会覆盖\([0,(m-1)/(n-1)]\),可以省掉一个\(n^2\)。然后(没删反......
  • 『模拟赛』【MX-S7】梦熊NOIP2024模拟赛3
    Rank因为提前知道打不完就没打暴力A.【MX-S7-T1】「SMOI-R2」HappyCardlink。签。比较好想到炸弹等价于三带一,因此本质只有三种出牌类型。并且三带一一次能出掉四张牌,显然优先打三带一是很优的。所以我们处理出三带的个数以及剩下零牌中对子的个数,然后分讨。如果三带......