Gravatar
op_组撒头屯
积分:2982
提交:327 / 662

“超级无敌神仙炫酷无敌原神大王”豪华套餐堂堂复活。

首先树剖,考虑维护轻儿子的贡献,之后在重链上直接查。记 $f_u$ 为 $u$ 的子树中到 $u$ 的最大答案,$g_u$ 为 $u$ 的所有轻儿子中 $f_v$ 的最大值,$dis_u$ 为 $u$ 到根的距离。

询问时,在重链中往下走就维护 $g_u+dis_u$,往上走就维护 $g_u-dis_{fa_u}$,重链之间就用 $g_u$ 转移。

修改时,用类似询问的方法维护重链顶的 $f_u$,再更新 $g_{fa_u}$。考虑对每个点开一个 set 维护 $g_u$ 即可。

时间复杂度 $O(n\log^2 n)$,巨大难写。



题目1887  [国家集训队 2011] Crash的旅行计划      10      3 条 评论
2023-11-06 17:05:20    
Gravatar
yuan
积分:14
提交:1 / 1

CSP2023-S 模拟赛 pro1 题解贡献:rsr & lgc



题目3919  坡伊踹      4      评论
2023-10-30 13:38:45    
Gravatar
┭┮﹏┭┮
积分:2987
提交:753 / 1663

本题另一种做法:二分图

题目描述中可知要找最小的值,即任意两个大于该值的罪犯都应该被分在两个不同的监狱,这样就可以想到二分图,先二分,将大于mid的边全部连上,直接判断二分图

如若是,则r = mid,否则l = mid+1



题目520  [NOIP 2010]关押罪犯 AAAAAAAAAA      6      评论
2023-10-27 19:00:45    
Gravatar
Benjamin
积分:1054
提交:405 / 658

__int128类型使用方法

该题大整数运算部分,可以使用 __int128 类型,该类型需要 自定义输入输出,详细方法请参考如下代码:

#include <bits/stdc++.h>
using namespace std;

typedef __int128 LL;

inline read(LL &x)//输入
{
  x = 0;
  LL f = 1;
  char ch;
  
  if((ch = getchar()) == '-')
    f = -f;
  else
    x = x*10 + ch-'0';
  
  while((ch = getchar()) >= '0' && ch <= '9')
    x = x*10 + ch-'0';
  
  x *= f;
}

inline print(LL x)//输出
{
  if(x < 0)
  {
    x = -x; putchar('-');
  }
  
  if(x>9) print(x/10);
  
  putchar(x%10+'0');
}

int main()
{
  LL a, b;
  read(a); read(b);
  print(a + b);
  return 0;
}

题目3508  [NOIP 2020]排水系统      8      2 条 评论
2023-10-27 14:04:50    
Gravatar
LXJ
积分:102
提交:42 / 93


对于学过排序的来说是一道比较简单的题。思路:题目让给出时长最短的方法,参加之后增加的值都是1,所以先将所有活动时长从小到大排列一遍,再逐个参加,
直到满足条件为止,一下展示的是sort排序方法
#include<bits/stdc++.h>//万能头文件
using namespace std;
int a[100001],b[100001],m,n,ans;//ans的值自动会为0
int main(){
    freopen("bird.in","r",stdin);//freopen文件读写
    freopen("bird.out","w",stdout);
    cin>>n>>m;//读入
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a,a+n);//将时长从小到大排列
    for(int i=1;i<=m;i++) ans+=a[i];//加上所需时间
    cout<<ans;//输出结果
    return 0;

}



题目3900   [桐柏邀请赛S14]bird AAAAAAAAAA      4      评论
2023-10-19 21:12:42    
Gravatar
┭┮﹏┭┮
积分:2987
提交:753 / 1663

这道题的思路比较简单,就不说了(除了代码有些长)

主要是总结一下tarjan求强连通分量的用法总结:
1.就是tarjan模板题例

·1.619. [金陵中学2007] 传话和1001. [WZOI 2011 S3] 消息传递(一道题,重复了)

·2.921. [東方S1] 上白泽慧音 和 1298. 通讯问题(+存储scc)

2.有些思维的tarjan题

·1.3810. [USACO Open22 Silver]Visits(环内处理)

·2.1870. [国家集训队2011]稳定婚姻(怎么建有向图)

3.tarjan后对DAG图(有向无环图)的处理

·1.关于出度入度问题的

 ·449. 网络病毒 和 908. [USACO 5.3] 校园网(3275. [POJ 1236]学校网络 又重复了:()

 ·1175. [顾研NOIP] 旅游电车

·2.缩点后处理的

 ·2229. 正则表达式(缩点后跑最短路)

 ·3644. [POJ 2762]从u到v还是从v到u?(缩点后拓扑序)

4.tarjan与其他的结合

 ·3645. [BZOJ 2438]杀人游戏(与概率相关)

5.tarjan进阶2-SAT(模板洛谷https://www.luogu.com.cn/problem/P4782)

 ·3452. POJ 3678]卡图难题(xor,or,and结合)


题目2229  正则表达式 AAAAAAAAAAAAAAAAAAAA      8      评论
2023-10-19 17:20:33