ICode9

精准搜索请尝试: 精确搜索
  • [ZJOI2008] 无序运动 题解2022-07-20 09:01:22

    你谷 link 一道蛮模版的字符串题,只需要一步非常显然的转化。 首先思考如果无视四种操作该怎么做,如果将每一个点看成是一个字符,那么就是给定一个文本串,多个模式串,求每个模式串在文本串里出现几次,这显然是一个字符串的模板题,可以使用 AC 自动机,也可以使用诸如后缀数组、后缀树、后缀

  • HYSBZ1036 [ZJOI2008]树的统计(树链剖分)2022-07-01 19:32:47

    将树通过树链剖分转化成线性序列,用线段树维护最值,和值即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=30005; 7 int n,m; 8 int head[maxn],to[maxn<<1],nxt[maxn

  • [ZJOI2008] 骑士2022-05-20 20:31:07

    P2607 [ZJOI2008] 骑士 思路 显然抽象成图, 由每个骑士向他最讨厌的骑士 每个节点对应一条边, 即 \(n\) 个节点, \(n\) 条边, 并且没有说任意两点相联通, 所以是基环森林. 那么很容易就能想到基环树形dp 状态 显然对于每个节点有两种选择 选( \(1\) ) 不选( \(0\) ) 很容易设计:

  • 洛谷P2607 [ZJOI2008] 骑士2022-04-15 22:32:43

    在做这道题之前,可以先去看一下: P1453 城市环路: https://www.cnblogs.com/liyishui2003/p/16150985.html 如果说城市环路是没有上司的舞会的基环树版本 那P2607就是城市环路的基环树森林版本 刚开始开开心心把城市环路的代码改了改输出输入就交了,wa,20tps 挠头,想了想,唉,它没有保证

  • P2587 [ZJOI2008]泡泡堂(贪心)2021-10-06 01:32:13

    类似田忌赛马 首先这道题满足对称性:要想得到最差情况,只需求出对手的最优情况即可。 只考虑最优情况: 先不考虑相等情况: 如果当前最小大于对手最小,直接打掉,+2; 如果当前最大大于对手最大,直接打掉,+2; 否则用最小的换最大的,+0/+1。 考虑相等情况: 如果最大最小都相等,那么+1+1=+2(交换); 如果

  • 洛谷 P2587 [ZJOI2008]泡泡堂(贪心)2021-10-01 19:03:39

    传送门 解题思路 田忌赛马这道题的加强版。 收回我不能用贪心来解决的话。 排序后每个序列都用两个指针记录已经使用的数的位置。(一定先使用两边) 具体策略为: 若最大的比对方大,则最大的上。 若最小的比对方大,则最小的上。 否则就用最小的打对面最大的。 AC代码 #include<iostream>

  • [ZJOI2008] 骑士2021-07-03 16:03:54

    [ZJOI2008]骑士 题意简述 求基环树森林中的最大权独立集。 数据范围:\(1\le n\le 10^6\)。 知识要点 树形 DP 基环树 题目分析 题目一上眼,是一个显然的最大权独立集问题。这是树形 DP 中选择节点类的题目,如果整个图构成一颗树的话,可以直接套路地定义状态 \(dp[i][0]/dp[i][1

  • [ZJOI2008]生日聚会2021-05-29 19:07:36

    嘟嘟嘟   此题一看就是一个dp题。 首先我们设dp[i][j]表示前 i 个人中有 j 个男生(这和dp[i][j]表示 i 个男生 j 个女生等价),然而当我们转移到dp[i + 1][j + 1]或dp[i + 1][j]时,限制条件没有用上。所以要再加两维dp[i][j][x][y]表示前 i 个人中有 j 个男生,其中男生最多比女生多个,女

  • [ZJOI2008]树的统计2021-05-29 18:55:50

    嘟嘟嘟   一看就知道,一道树链剖分板子题,原来2008年的ZJOI这么可爱。 那啥别忘了权值有负数,所以查询最大值的时候ans初始值应该是-INF,别写成0了。 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #includ

  • P2607 [ZJOI2008]骑士2020-11-01 10:01:32

    题目大意:有\(n\)个士兵,每个士兵有\(d_i,a_i\),表示\(i\)和\(d_i\)士兵不能同时出征,\(i\)士兵战斗力为\(a_i\),组一个士兵集合使其战斗力最大。 基环树\(\mathcal{dp}\)。 每次找到一个环并强行断开,进行两次\(\mathcal{dp}\),\(\mathcal{dp}\)方法: 设\(dp_{i,0}\)为不选\(i\)的最大战

  • LG P2592 [ZJOI2008]生日聚会2020-09-27 14:32:37

    Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party。 hidadz带着朋友们来到花园中,打算坐成一排玩游戏。为了游戏不至于无聊,就座的方案应满足如下条件: 对于任意连续的一段,男孩与女孩的数目之差不超过$k$。 很快,小朋友便找到了一种方案坐了下来开始游戏。hi

  • P2607 [ZJOI2008]骑士2020-09-09 20:02:45

    P2607 [ZJOI2008]骑士 题目描述 Z 国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。 最近发生了一件可怕的事情,邪恶的 Y 国发动了一场针对 Z 国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的 Z 国又怎能抵挡的住 Y

  • 【树形DP】ZJOI2008 骑士2020-04-24 12:53:55

    题目内容 洛谷链接 有\(n\)位骑士,每个人的战力可能不同,并且每一个人都有且仅有一个憎恨的人,互相憎恨的人不能在同一队中。 求组合为一个骑士队的最大战斗力。 PS:可以去看看题目背景学学历史(雾) 输入格式 第一行包含一个正整数\(n\),描述骑士团的人数。 接下来\(n\)行,每行两个正整数,

  • 【ZJOI2008】骑士(基环树+DP)2020-02-24 23:55:49

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目链接:https://www.luogu.com.cn/problem/P2607 题目链接:https://loj.ac/problem/10162 做法 看似有向边,其实可以转化为无向边。 构成一个基环森林 但是需要特判一种情况:当有两个人互相讨厌的时候,形成一棵树,同时

  • [ZJOI2008] 骑士 - 基环树dp2020-02-04 21:54:30

    一类基环树dp都是这个套路吧 随便拆掉环上的一条边 然后跑树形dp,设\(f[i][0/1]\)表示以第\(i\)个人为根的子树,第\(i\)个人选或不选,能收获的最大值 以断点\(u,v\)为根分别跑基环树,每个连通块答案就是 \(max(f[u][0],f'[v][0])\) 血:两个骑士可能相互憎恨,形成重边

  • BZOJ 1039. [ZJOI2008]无序运动Movement2020-01-25 18:01:34

      平移、旋转、放缩对两个相似三角形没有影响,那么一个长度为 $n$ 的轨迹就可以描述为 $n-2$ 个三角形,每个三角形就用相邻两边长来描述,还得加上第二条线段在第一条线段的逆时针还是顺时针方向,因为如果不加这个就会出现翻不翻转带来的影响,然后就变成了字符串匹配了。不过由于字符集

  • BZOJ 1040. [ZJOI2008]骑士2020-01-25 18:00:51

      基环森林上DP。 我刚开始想的就是找到环,然后把环上每个点及它的子树缩成一个点,就变成一个环上的DP了。然后就是强制第一个不取和强制最后一个不取。 看了别人的题解发现可以不用那么麻烦,只要找到环上任意相邻的两点,强制把这条边断开,然后还是DP两次就行了。 DP方程就比较naive

  • BZOJ 1034. [ZJOI2008]泡泡堂BNB2020-01-25 15:01:05

      感觉我双指针不行啊...写了个multiset过的。看了别人代码改了发双指针。 写几个样例大概就知道跟田忌赛马一样了。 #include <bits/stdc++.h> const int N = 1e5 + 7; int a[N], b[N]; std::multiset<int> st1, st2; bool vis[N]; int solve(int A[], int B[], int n) {

  • BZOJ 1037. [ZJOI2008]生日聚会Party2020-01-25 15:00:16

      $dp[i][j][k][l]$ 表示 $i$ 个男生,$j$ 个女生,结尾段男生最多比女生多 $k$ 个,女生最多比男生多 $l$ 个。 $dp[i + 1][j][k + 1][\max\{l - 1, 0\}]$ $+=$ $dp[i][j][k][l]$ $dp[i][j+1][\max\{k - 1, 0\}][l+1]$ $+=$ $dp[i][j][k][l]$ #include <bits/stdc++.h> const int M

  • BZOJ 1038. [ZJOI2008]瞭望塔2020-01-25 15:00:08

        能看到其他所有点的区域就是轮廓线的半平面交。 然后最小高度就是半平面交与轮廓线这两个一次分段函数的差,极值肯定出现在分段点上,分别求一下即可。 #include <bits/stdc++.h> #define db double const db eps = 1e-9; inline int sign(db k) { return k < -eps ? -1 :

  • 洛谷P2590 [ZJOI2008]树的统计2019-11-08 16:57:01

    还是树剖模板啊QwQ #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define maxn 600100 using namespace std; struct node { long long max_num,sum; }; node tree[maxn<<2]; int n,m; long long num[maxn],num

  • P2590 [ZJOI2008]树的统计2019-09-22 16:57:09

    怎么表达我此时的心情呢,重构代码到我想把它吃下去 P2590 [ZJOI2008]树的统计 题解 线段树维护树链剖分 1.单点修改    不需要pushdown 2.区间最大值    取答案,初始化ans最小值 3.区间求和    点权和,最后dfn[x]就不用+1了    如果是边权和押到点上,那就需要+1啦        

  • [ZJOI2008]骑士2019-07-25 13:01:26

    题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队。于是人们把所有的希望

  • [ZJOI2008]树的统计2019-07-25 12:55:33

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点

  • P2590 [ZJOI2008]树的统计2019-07-23 12:56:46

    的确是入门题 #include<bits/stdc++.h>#define N 100005#define inf 1000000000using namespace std;int n,q,a[4*N];struct Edge{ int u,v,next;}G[N];int tot=0,head[N];int size[100005],wson[100005],fa[100005],d[100005],top[100005];int tpos[100005],pre[100005],

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有