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;
}

 

支付宝支付(三):周期扣款实现注意细节 一、周期扣款实现说明 1、官方文档入口:https://opendocs.alipay.com/open/20190319114403226822/intro 2、根据官方文档说明,周期扣款有两种方式:先签约后代扣场景和支付后签约场景 3、周期扣款接入问题文档: a>https://opendocs.alipay.com/support/01rg24 b>https://opensupport.alipay.com/support/knowledge/50249/20160248753 阅读详情

相关推荐

保姆级教程:用Python+OpenCV实现相移法与格雷码三维重建(从生成条纹到点云生成)

本文详细介绍了使用Python和OpenCV实现相移法与格雷码三维重建的全流程,从条纹生成到点云计算。通过结构光技术,结合相移法和格雷码,实现高精度的三维重建,适用于无纹理物体表面的密集对应点生成。教程包含环境搭建、条纹生成、相位计算、三维点云重建及常见问题排查,适合计算机视觉开发者和研究人员。

weixin_33443333的博客 351

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

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

ypeijasd的专栏 6701

cJSON库用完后内存泄漏?手把手教你正确使用cJSON_Delete和free释放资源

本文深入解析cJSON库的内存管理机制,重点解决使用后的内存泄漏问题。通过详细讲解cJSON_Delete和free的正确使用方法,帮助开发者在处理JSON数据时有效释放资源,避免内存泄漏。特别适用于嵌入式系统和资源受限环境,提升开发效率和系统稳定性。

weixin_30808693的博客 418

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

CIMPro孪大师,支持 3DGS 高斯泼溅的一站式零代码数字孪生平台

高斯泼溅导入数字孪生开发引擎

2501_90821319的博客 1110

浙政钉H5应用上架实战:从环境配置到发布避坑指南

本文详细解析浙政钉H5应用上架全流程,从环境配置到发布避坑指南。重点介绍Vue 2.6 + Node 14.21.3的稳定开发环境搭建、项目结构规范及常见报错解决方案,帮助开发者高效完成浙政钉H5应用上架流程。

weixin_27943395的博客 286

【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

Ubuntu 22.04 “软件与更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5855

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

先登入。

2301_79273890的博客 923

使用 MATLAB/Simulink + Simscape Electrical,构建一个含光伏并网系统与SVG的联合仿真模型,实现动态无功补偿与电压支撑

摘要:本文详细介绍了基于Simulink的SVG与光伏并网逆变器联合系统建模方法。通过构建包含光伏单元、SVG主电路和控制模块的仿真模型,实现动态无功补偿与电压稳定。重点阐述了ip-iq无功检测算法、双闭环控制和SVPWM调制等关键技术。仿真结果表明,该系统能快速响应无功需求,在10ms内将功率因数提升至0.98以上,有效抑制电压波动。文章为新能源并网系统中的电能质量治理提供了实用解决方案,并提出了进一步优化方向。

xiaoheshang_123的博客 322

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 471

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

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

lijf2001的博客 364

Unity零基础到入门 ☀️| 轻松学会 Unity界面布局和简单实例——入门级!(^_−)☆

入门级Unity知识,一起加油呀!

努力前行,总会成为自己心中的那道光 1万+

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

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

weixin_30855099的博客 200

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

ypeijasd的专栏 730

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

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

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、付费专栏及课程。

余额充值