JZOJ 5908【NOIP2018模拟10.16】开荒(kaihuang)

JZOJ 题目篇 jzoj 2922 打印Hello word 众所周知,c++是许多人跨进代码世界的第一扇大门。但是你如何检验你的综合能力呢,有两个很好的网站它们分别是JZOJ与openjudge。我们先来讲OJ(JZOJ)上的题目。Tip:想要网址的我放在下面???? JZOJ:www.jzoj.cn openjudge:openjudge.cnTip:openjudge推荐加入NOI。 现在进入正题,jzoj导图第一题:2922【入门】hello world! 这一题主要讲了一个程序猿的入门 打印Hello wor 阅读详情

神奇的树剖 + 利用一次询问多条路径 话不多说先放题面

Description

题目背景:
尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门。他加入师门后发现有无穷无尽的师兄弟姐妹,这几天新副本开了,尊者神高达的师门作为一个 pve师门,于是他们决定组织一起去开荒。

题目描述:
师门可以看做以 1 为根的一棵树,师门中的每一个人都有一定的装备分数。一共会有 q 个事件。每个事件可能是一次开荒,也可能是因为开荒出了好装备而导致一个人的装分出现了变化。对于一次开荒,会有 k 个人组织,由于师门的号召力很强,所以所有在组织者中任意两个人简单路径上的人都会参加。

Input

第一行 n ,q;
接下来 1 行 n 个数,代表每个人的分值;
接下来 n-1 行 u,v 代表一条边
接下来 q 行
Q 代表询问,接下来 k 个数代表组织的人数,读入为 0时停止读入。
C 代表修改,输入 x,w 代表将 x 的分值变为 w

Output

共 Q 的数量行,为开荒的人的总分值

Sample Input

4 4
10 5 2 2
1 2
2 3
2 4
Q 3 4 0
C 3 200
Q 3 4 0
Q 1 4 0

Sample Output

9
207
17

样例解释:
第一次询问,参加的人有 2,3,4 5+2+2=9
第一次修改,权值为 10 5 200 2
第二次询问,参加的人有 2,3,4 5+200+2=207
第三次询问,参加的人有 1,2,4 10+5+2=17

Data Constraint

数据范围:
20%的数据 n<=10000,q<=500;
另外 20%的数据 k=2
另外 20%的数据 没有修改操作
所有数据 n,q<=100000,所有询问 k 的和<=1000000
保证数据合法

 

这道题树剖很显然嘛 但我们一次要求多条路径

我的暴力想法—— laz 数组存多条路径走过的点 权值改为 1

为了剪枝 我把子节点有经过的点设为了 2 没有的就是 0 这样可以大大提高效率

找到 2 继续往下找 找到 1 直接返回线段树的值 找到 0 返回 0

于是就有了三十分 (预测没加优化只有 20 分 第三个点 700ms 卡过)

暴力代码

#include <algorithm>
#include <cstring>
#include <cstdio>
#define ll long long
using namespace std;
const int MAXN = 100010;
struct edge{int next,to;}e[MAXN << 1];
ll tr[MAXN << 3];
int siz[MAXN],dep[MAXN],fa[MAXN],son[MAXN],top[MAXN],id[MAXN],oid[MAXN];
int first[MAXN],v[MAXN],laz[MAXN << 3],tot;
inline int re() {
	char q = getchar();
	int x = 0;
	while (q < '0' || q > '9') q = getchar();
	while ('0' <= q && q <= '9')
		x = (x << 3) + (x << 1) + q - (3 << 4),q = getchar();
	return x;
}
inline void add(int x,int y) {
	e[++tot].next = first[x];
	e[tot].to = y;
	first[x] = tot;
}
inline void dfs1(int p) {
	dep[p] = dep[fa[p]] + 1;
	++siz[p];
	for (int a = first[p],b = e[a].to ; a ; a = e[a].next,b = e[a].to)
		if (b == fa[p]) continue; else {
			fa[b] = p;
			dfs1(b);
			siz[p] += siz[b];
			if (siz[b] > siz[son[p]]) son[p] = b;
		}
}
inline void dfs2(int p,int f) {
	top[p] = f;
	id[p] = ++tot;
	oid[tot] = p;
	if (!son[p]) return;
	dfs2(son[p],f);
	for (int a = first[p],b = e[a].to ; a ; a = e[a].next,b = e[a].to)
		if (b != fa[p] && b != son[p]) dfs2(b,b);
}
inline void build(int l,int r,int len) {
	if (l == r) {tr[len] = v[oid[l]]; return;}
	int mid = (l + r) >> 1;
	build(l,mid++,len << 1);
	build(mid,r,len << 1 | 1);
	tr[len] = tr[len << 1] + tr[len << 1 | 1];
}
inline void update(int l,int r,int len,int i,int j) {
	if (l == r && l == i) {tr[len] = j; return;}
	int mid = (l + r) >> 1;
	if (i <= mid) update(l,mid,len << 1,i,j);
	else update(++mid,r,len << 1 | 1,i,j);
	tr[len] = tr[len << 1] + tr[len << 1 | 1];
}
inline void uplaze(int l,int r,int len,int i,int j) {
	if (laz[len] & 1) return;
	if (i <= l && r <= j) {laz[len] = 1; return;}
	laz[len] = 2;
	int mid = (l + r) >> 1;
	if (i <= mid) uplaze(l,mid,len << 1,i,j);
	if (mid < j) uplaze(++mid,r,len << 1 | 1,i,j);
}
inline ll rebuild(int l,int r,int len) {
	if (!laz[len]) return 0;
	if (laz[len] & 1) return tr[len];
	int mid = (l + r) >> 1;
	return rebuild(l,mid,len << 1) + rebuild(++mid,r,len << 1 | 1);
}
void lpcate(int x,int y) {
	while (top[x] != top[y])
	{
		if (dep[top[x]] < dep[top[y]]) swap(x,y);
		uplaze(1,siz[1],1,id[top[x]],id[x]);
		x = fa[top[x]];
	}
	if (dep[x] > dep[y]) swap(x,y);
	uplaze(1,siz[1],1,id[x],id[y]);
}
ll uplone(int l,int r,int len,int i) {
	if (l == r && l == i) return tr[len];
	int mid = (l + r) >> 1;
	if (i <= mid) return uplone(l,mid,len << 1,i);
	return uplone(++mid,r,len << 1 | 1,i);
}
int main()
{
	freopen("kaihuang.in","r",stdin);
	freopen("kaihuang.out","w",stdout);
	int n = re(),q = re(),x,y;
	for (int a = 1 ; a <= n ; ++ a) v[a] = re();
	for (int a = 1 ; a <  n ; ++ a) x = re(),y = re(),
	add(x,y),add(y,x); tot = 0;
	dfs1(1),dfs2(1,1);
	build(1,n,1);
	while (q--)
	{
		char w = getchar();
		while (w != 'Q' && w != 'C') w = getchar();
		if (w == 'Q')
		{
			memset(laz,0,sizeof(laz));
			for (n = 1,v[n] = re() ; v[n] ; ++ n,v[n] = re());
			for (int a = 2 ; a < n ; ++ a)
			for (int b = 1 ; b < a ; ++ b) lpcate(v[b],v[a]);
			if (n > 2) printf("%lld\n",rebuild(1,siz[1],1));
			else printf("%lld\n",uplone(1,siz[1],1,id[v[1]]));
			continue;
		}
		x = re(),y = re(),update(1,siz[1],1,id[x],y);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

 

好了好了做题怎么能不发正解呢

正解就是多条路径按 dfs 序 排然后求 lca 可使每个点经过两遍 两点 lca (可能除最顶上的) 经过三遍 这个手推可以发现 证明的话.....进点一次 跳到第二个点就两次 第 lca>该两点的点再跳就三次 每次减去一个 每个点就变两次了 最上面的次数就是 lca 为该点的节点对数 每次减去一个就为 0 了 所以要加上两个该点权

根据这个 我们可以直接求路径距离 然后减去相邻两点 lca 的权值 最后加上两个所有点最顶上的 lca (也是所有点的 lca) 的权值

其他部分不变 不过单点路径不用特判了(本来就不是那样做的).....话说我的暴力打的也是累

下放正解

#include <algorithm>
#include <cstring>
#include <cstdio>
#define ll long long
using namespace std;
const int MAXN = 100010;
struct edge{int next,to;}e[MAXN << 1];
ll tr[MAXN << 3],mx;
int siz[MAXN],dep[MAXN],fa[MAXN],son[MAXN],top[MAXN],id[MAXN],oid[MAXN];
int first[MAXN],v[MAXN],bot[MAXN],tot;
inline short cmp(int x,int y) {return id[x] < id[y];}
inline int r() {
	char q = getchar(); int x = 0;
	while (q < '0' || q > '9') q = getchar();
	while ('0' <= q && q <= '9') x = (x << 3) + (x << 1) + q - (3 << 4),q = getchar();
	return x;
}
inline void add(int x,int y) {
	e[++tot].next = first[x];
	e[tot].to = y;
	first[x] = tot;
}
inline void dfs1(int p) {
	dep[p] = dep[fa[p]] + 1;
	++siz[p];
	for (int a = first[p],b = e[a].to ; a ; a = e[a].next,b = e[a].to)
		if (b == fa[p]) continue; else {
			fa[b] = p;
			dfs1(b);
			siz[p] += siz[b];
			if (siz[b] > siz[son[p]]) son[p] = b;
		}
}
inline void dfs2(int p,int f) {
	top[p] = f;
	id[p] = ++tot;
	oid[tot] = p;
	if (!son[p]) return;
	dfs2(son[p],f);
	for (int a = first[p],b = e[a].to ; a ; a = e[a].next,b = e[a].to)
		if (b != fa[p] && b != son[p]) dfs2(b,b);
}
inline void build(int l,int r,int len) {
	if (l == r) {tr[len] = v[oid[l]]; return;}
	int mid = (l + r) >> 1;
	build(l,mid,len << 1);
	build(++mid,r,len << 1 | 1);
	tr[len] = tr[len << 1] + tr[len << 1 | 1];
}
inline void update(int l,int r,int len,int i,int j) {
	if (l == r && l == i) {tr[len] = j; return;}
	int mid = (l + r) >> 1;
	if (i <= mid) update(l,mid,len << 1,i,j);
	else update(++mid,r,len << 1 | 1,i,j);
	tr[len] = tr[len << 1] + tr[len << 1 | 1];
}
inline ll get(int l,int r,int len,int i,int j) {
	if (i <= l && r <= j) return tr[len];
	int mid = (l + r) >> 1; ll ans = 0;
	if (i <= mid) ans += get(l,mid,len << 1,i,j);
	if (mid < j) ans += get(++mid,r,len << 1 | 1,i,j);
	return ans;
}
inline ll lca(int x,int y) {
	ll ans = 0;
	while (top[x] != top[y])
	{
		if (dep[top[x]] < dep[top[y]]) swap(x,y);
		ans += get(1,siz[1],1,id[top[x]],id[x]);
		x = fa[top[x]];
	}
	if (dep[x] > dep[y]) swap(x,y);
	return ans - v[x] + get(1,siz[1],1,id[x],id[y]);
}
inline int mxlca(int x,int y){
	while (top[x] != top[y])
	{
		if (dep[top[x]] < dep[top[y]]) swap(x,y);
		x = fa[top[x]];
	}
	return dep[x] < dep[y] ? x : y;
}
int main()
{
	freopen("kaihuang.in","r",stdin);
	freopen("kaihuang.out","w",stdout);
	int n = r(),q = r(),x,y;
	for (int a = 1 ; a <= n ; ++ a) v[a] = r();
	for (int a = 1 ; a <  n ; ++ a) x = r(),y = r(),
	add(x,y),add(y,x); tot = 0;
	dfs1(1),dfs2(1,1);
	build(1,n,1);
	while (q--)
	{
		char w = getchar();
		while (w != 'Q' && w != 'C') w = getchar();
		if (w == 'Q')
		{
			for (n = 1,bot[n] = r() ; bot[n] ; ++ n,bot[n] = r());
			sort(bot + 1,bot + n,cmp);
			ll ans = bot[1];
			for (int a = 2 ; a < n ; ++ a) ans = mxlca(ans,bot[a]);
			ans = v[ans] << 1;
			for (int a = 2 ; a < n ; ++ a) ans += lca(bot[a - 1],bot[a]);
			ans += lca(bot[1],bot[--n]);
			printf("%lld\n",ans >> 1);
			continue;
		}
		x = r(),y = r(),v[x] = y,update(1,siz[1],1,id[x],y);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

 

UE4 Instanced Mesh 半透明渲染顺序不对解决 以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,... 阅读详情

相关推荐

Educoder | 计算机网络实验-IP协议分析

本关任务:使用 Ping 命令发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IPV4 地址的编址方法,加深对 IP 协议的理解。

Mksg_28的博客 4755

Jzoj 一维数组(包括排序)部分代码(共42题)

Jzoj 数组部分题目 1117: 【入门】数组逆序 2787: 【入门】统计 1635: 【入门】输出奇数和偶数 1113: 【入门】最大数 1125: 【入门】找找谁的身高超过全家的平均身高 1118: 【入门】数组元素的查找 1135: 【入门】查找支撑数 1120: 【入门】数组元素的移动 1121: 【入门】数组元素的插入 1122: 【入门】数组元素的删除 1119: 【入门】元素插入有序数组 1138: ......

ypeijasd的专栏 6701

一文讲清CAN和CANFD的区别

本文将从技术原理、协议特性到应用场景,深度解析两者的核心差异。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 3210

Jzoj 循环嵌套部分代码(共27题)

1102: 【入门】字符图形1-星号矩形 #include <bits/stdc++.h> using namespace std; int n; int main() { scanf("%d", &n); for(int i=1; i<=n; ++i){ for(int j=1; j<=n; ++j){ printf("*"); } printf("\n"); } return 0; } 1103: 【入门】字符图形2-星号直角 #inc

ypeijasd的专栏 2789

激光雷达测距方式全解析:ToF、三角测距和FMCW到底怎么选?

本文深度解析激光雷达三种主流测距方式(ToF、三角测距和FMCW)的技术原理、环境适应性和成本模型,提供场景化选型决策指南。通过对比各技术在精度、抗干扰能力和维护成本等方面的表现,帮助工程师在自动驾驶、工业检测和消费电子等领域做出最优选择。

qqq44的博客 719

【YOLO系列】YOLOv11详解:模型结构、损失函数、训练方法及代码实现

YOLOv11在目标检测领域实现重大突破,通过动态骨干网络(Dyna-Backbone)和FPN++架构,在保持高帧率(≥60FPS)的同时提升小目标检测精度(AP_S提升5.6%)。创新采用CIoU++损失函数和类别平衡Focal Loss,结合Mosaic-Plus数据增强,参数量减少18%至6.5M。实验显示,该模型在COCO数据集上实现更高mAP,特别适合移动端部署,Jetson Xavier平台能耗比优化至3.2W·ms⁻¹,支持目标检测、实例分割等多任务场景。关键创新包括动态深度调整和双向特征金

一碗白开水一 3444

【JZOJ 省选模拟】最大公约数

题目 Description Input 从文件 divisor.in 中读入数据。 只有一行,输入一个整数n 。 Output 输出到文件 divisor.out 中。 输出一行,一个整数,表示式子的结果。由于三叶只需要你的验证而不是给出答案,所以你只需要输出答案(式子的值)对 10^+7取模的值。 Sample Input Sample Input1 3 Sample Input2 985 Sample Output Sample Output1 15 Sample Output2 34988098

Brute♂force 693

在 ABAP Cloud 中玩转 CL_ABAP_PARALLEL 并行处理:从原理到实战

ABAP并行处理框架CL_ABAP_PARALLEL解析 本文系统介绍了SAP ABAP环境中实现并行处理的CL_ABAP_PARALLEL框架。该框架通过封装异步RFC和对话进程,为开发者提供了面向对象的API,显著提升大批量数据处理的效率。 文章首先分析了ABAP环境需要并行处理的原因:传统的串行处理在面对百万级数据时效率低下。然后详细介绍了CL_ABAP_PARALLEL的设计思路,它是一个"小型线程池"式的同步并行框架,适用于批量计算场景。此外,文章重点讲解了控制并行任务的关键参

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 341

jzoj竞赛:免费的刷题竞赛(我改成所有了哦!)(附密码)

先登入。

2301_79273890的博客 923

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

【图像拼接】源码精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)

注:Pytorch代码。【图像拼接论文精读】专栏对应文章【图像拼接】论文精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)配合对应的文章阅读,效果更佳!注:请重点关注代码段中的注释!!!有一些讲解的东西直接写在代码段的注释中了,同时多关注红色字体和绿色字体!!!我认为深度学习方法和传统方法有很多相似之处。比如:深度学习中的损失函数和传统方法中的对齐项、失真项等其实原理相同,只是求解方式不同。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7274

JZOJ5908. 【NOIP2018模拟10.16】开荒(kaihuang)

Description 题目背景: 尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门。他加入师门后发现有无穷无尽的师兄弟姐妹,这几天新副本开了,尊者神高达的师门作为一个 pve师门,于是他们决定组织一起去开荒。 题目描述: 师门可以看做以 1 为根的一棵树,师门中的每一个人都有一定的装备分数。一共会有 q 个事件。每个事件可能是一次开荒,也可能是因为开荒出了好装备而导致一个人的...

lijf2001的博客 364

Vue3 - Element Plus 下拉选择器 el-select 覆盖修改 placeholder样式,解决覆盖不生效问题(支持修改文字颜色、文字大小、选择器边框、hover效果、宽高等任意样式

vue3,element-plus,el-select,下拉选择器,下拉选择框,Select选择器,deep覆盖无效怎么办,怎么修改placeholder文字颜色,选择器select修改边框样式,修改文字大小,elementPlus选择器如何覆盖hover效果,使用deep改不了样式,修改边框颜色,select去掉边框,vue3+elementPlus中select选择器如何修改placeholder文字样式,修改el-select样式,select选择器样式覆盖不了咋办,el-select如何覆盖原样式,

🏆 前端领域优质创作者 1万+

[JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)

题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门。他加入师门后发现有无穷无尽的师兄弟姐妹,这几天新副本开了,尊者神高达的师门作为一个 pve师门,于是他们决定组织一起去开荒。题目描述:师门可以看做以 1 为根的一棵树,师门中的每一个人都有一定的装备分数。...

weixin_30855099的博客 200

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[Jzoj] 1293. 气象牛

题目描述 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1…M_N(1 <= M_i <= 1,000,000). Betsy想找出一部分测量结果来总结整天的气压分布. 她想用K(1 <= K <= N)个数s_j (1 <= s_1 < s_2 < … < s_K &l...

AAA_Ljw 291

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Jzoj 模拟算法部分题目(共7题)

Jzoj 模拟算法部分题目(共7题)

ypeijasd的专栏 730

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jzoj答案推荐

http://t.csdn.cn/HKxTb http://t.csdn.cn/FbU4b http://t.csdn.cn/ocZPN 这几个文章答案都不错

m0_72781649的博客 1330

jzoj账户/网站

进去后(会有些慢)点左边的登录。用户名:1234567812345678。还有账户:打开网站,找到最上面一行的最后面:有一个登录,点。密码:jzojc++

A334356的博客 598

【JZOJ 省选模拟】字符串

题目 Description 你喜欢字符串。有人送了你一个仅含小写字母的字符串。 由于你是一名优秀的 ????????er,所以你决定对这个字符串展开研究。 定义两个字符串是相似的,当且仅当存在至多一个 ???? ,使得这两个字符串中只有第 ???? 个字母不同。 你取出了这个字符串中所有长度为m 的子串。你想知道,对于每个长度为 m 的子串,有多少个其它长度为 m 的子串与它相似。 Input 第一行两个正整数 n,m...

Brute♂force 778

未完成任务

网络流二十四题 (1/24)

~NULL~ 638

Jzoj 数字方阵部分代码(共30题)

1208: 【入门】数字走向I #include<bits/stdc++.h> using namespace std; int n, a[11][11], cnt=1; int main() { scanf("%d", &n); for(int i=1; i<=n; ++i){ for(int j=1; j<=n; ++j){ a[i][j]=cnt; cnt++; //场宽为3, 右对齐 printf("%3d", a[i][j]);

ypeijasd的专栏 3639

【JZOJ A组】 量子纠缠

Description Input 第一行包含一个正整数 m,代表操作数。 接下来 m 行,每行可能有以下形式: 1 s 代表将数字串 s 加入信息集中 2 s 代表询问数字串 s 是否在信息集中 3 a b 代表使数字串 a 和 b 互相纠缠 Output 对于每一个 2 操作,如果询问串不在集合中,请输出一行一个整数 0,否则输出一行一个整 数 1。 Sampl...

Brute♂force 1078

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h> using namespace std; int n, sum; int main() { scanf("%d", &n); for(int i=1; i<=n; i+=2){ sum+=i; } printf("%d", sum); return 0; } 1012: 【入门】两数比大小 #include <bits/stdc++

ypeijasd的专栏 2178

【NOIP普及组模拟】【JZOJ】牛的零食

JZ友链 洛谷上也有相同的题目 难度 :普及/提高- 描述:JZOJ普及组模拟比赛时的一道题目 题目描述 FJ经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱。为此,FJ购置了N(1&lt;=N&lt;=2000)N(1&lt;=N&lt;=2000)N(1<=N<=2000)份美味的零食来卖给奶牛们。每天FJ售出一份零食。当然F...

lzx_真的好菜啊啊啊 581

黑暗之魂(JZOJ)

题目 题解 思路: 自环重边可以特判然后就变成了找树上的直径最大,答案加1即可 否则这就是一棵基环树,找到这个环,然后求出以环上的每个节点为根的最大直径,然后考虑在环上做贡献。 对于环上的每个点,先求出环的总长summ,显然对于i,与它贡献的点j一定满足,sum[i]表示从起点到i的环上路径长,其中起点可以随便给 然后破环成链,因为求的是最大,直接用单调队列维护即可。至于怎样找环,可以使用拓扑排序,也可以直接DFS 注意 拓扑排序不要写错,先判断这个点是否在环上,然后第二次连边时不要脸.

weixin_43823476的博客 444

开关灯(jzoj 3926)

开关灯 jzoj 3926 解题思路 有一个n×l的灯网,你可以把按某一列的灯的按钮,然后这一列开的关,关的开,你也可以把某一行的灯和别的行的灯调换,问从当前状态到目标状态最少按多少个按钮

ssllyf的博客 3302
上一篇: JZOJ 5904【NOIP2018模拟10.15】刺客信条
下一篇: JZOJ 1029【NOIP动态规划专题】电子眼
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值