花花的礼物 (huahua)

本文探讨了在图论中寻找神秘数的问题,通过最小生成树和线段树的结合,解决了一个关于节点联通性和神秘数求解的复杂挑战。算法涉及到离线和在线处理策略,以及Kruskal重构树的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from dtoj 1936

题意

花花是个爱动脑子的孩子,在她的生日的时候,她的爸爸给她准备了个礼物。但是,她的爸爸并不想让她轻易得到礼物,他把礼物放在了一个箱子里面,只有输入正确的密码才能打开箱子,而她的爸爸告诉了她这个礼物该怎么得到:
他们所在的城市可以看成有 nnn 个点, mmm 条边的无向图,每个点上有一个权值 aia_iai,每条边有一个权值 www
我们定义两个点 xxxyyy 关于 kkk 联通当且仅当存在一条从 xxxyyy 的路径,满足这条路径上的 www 的最大值小于等于 kkk
而密码就是和节点 xxx 关于 kkk 联通的所有节点的 aia_iai 构成的集合 BBBsummexsummexsummex
我们定义一个可重复数集 BBBsummexsummexsummex 为无法用 BBB 集合的子集的和表示的正整数的最小值。
例如,B={1,1,3,7}B=\{1,1,3,7\}B={1,1,3,7} ,他能表示 0{}0\{\}0{}1{1}1\{1\}1{1}2{1,1}2\{1,1\}2{1,1}3{3}3\{3\}3{3}4{1+3}4\{1+3\}4{1+3}5{1+1+3}5\{1+1+3\}5{1+1+3} ,但是他不能表示 666 ,所以 summex{1,1,3,7}summex\{1, 1, 3, 7\}summex{1,1,3,7}666
由于她的爸爸有点健忘,他可能会记错,所以会有多组( QQQ 组)询问。对于每组询问,你都要给一个正确的答案。
为了提高难度,我们会对数据加密,对于一个给定的数 SSS ,解密输入中的C++代码是:

inline void decode(int &x, int &y){
	x = (lstans & S) ^ x;
	y = (lstans & S) ^ y;
}

其中的 lstanslstanslstans 是上次询问的答案。
在这里插入图片描述

题解

考虑离线的做法
按照 kkk 排序,每个点当做一棵线段树,做最小生成树的时候,把边权 &lt;=k&lt;=k<=k 的边连接,并且线段树合并到根上,然后按照神秘数的做法找出 ansansans 即可
(到时候再补神秘数的题解
考虑在线作法,把 KruskalKruskalKruskal 重构树建出,然后每个点开一棵线段树,然后往根合并上去,查询的时候倍增找到其路径上第一个点权 &lt;=k&lt;=k<=k 的线段树,按照神秘数的做法即可
(注意原来的边有 5e55e55e5 条(一开始别的都对了,然后被这个坑了一晚上:(
上代码

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=2e5+5;LL s[N*20],ans;
int head[N],V[N],nex[N],b[N],B,tt;
int n,m,Q,S,a[N],tot,t,w[N],f[N];
int ls[N*20],rs[N*20],T[N],fa[N][20];
struct O{int x,y,z;}p[500005];
bool cmp(O A,O B){return A.z<B.z;}
int get(int x){
	return x==f[x]?x:f[x]=get(f[x]);
}
inline void add(int u,int v){
	V[++t]=v;nex[t]=head[u];head[u]=t;
}
#define d ((l+r)>>1)
void ins(int& x,int l,int r,int v){
	x=++tt;s[x]=v;if (l==r) return;
	if (v<=b[d]) ins(ls[x],l,d,v);
	else ins(rs[x],d+1,r,v);
}
int update(int x1,int x2){
	if (!x1 || !x2) return x1+x2;
	int x=++tt;s[x]=s[x1]+s[x2];
	ls[x]=update(ls[x1],ls[x2]);
	rs[x]=update(rs[x1],rs[x2]);
	return x;
}
LL query(int x,int l,int r,LL v){
	if (!x) return 0ll;
	if (l==r) return (LL)b[l]>v?0ll:s[x];
	if (b[d]>=v) return query(ls[x],l,d,v);
	return s[ls[x]]+query(rs[x],d+1,r,v);
}
void dfs(int x){
	for (int i=1;fa[fa[x][i-1]][i-1];i++)
		fa[x][i]=fa[fa[x][i-1]][i-1];
	for (int i=head[x];i;i=nex[i])
		fa[V[i]][0]=x,dfs(V[i]);
}
int main(){
	scanf("%d%d%d%d",&n,&m,&Q,&S);
	for (int i=1;i<=n;i++)
		scanf("%d",&a[i]),b[i]=a[i];
	sort(b+1,b+n+1);B=unique(b+1,b+n+1)-b-1;
	for (int i=1;i<=m;i++)
		scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
	sort(p+1,p+m+1,cmp);tot=n;
	for (int i=1;i<=n;i++) ins(T[i],1,B,a[i]);
	for (int i=1;i<n+n;i++) f[i]=i;
	for (int x,y,i=1;i<=m;i++){
		x=get(p[i].x),y=get(p[i].y);
		if (x==y) continue;
		w[++tot]=p[i].z;add(tot,x);add(tot,y);
		f[x]=tot;f[y]=tot;T[tot]=update(T[x],T[y]);
	}
	for (int i=1;i<=tot;i++) if (f[i]==i) dfs(i);
	for (int x,k;Q--;printf("%lld\n",ans)){
		scanf("%d%d",&x,&k);
		x=(ans&S)^x;k=(ans&S)^k;
		for (int i=19;~i;i--)
			if (fa[x][i] && w[fa[x][i]]<=k)
				x=fa[x][i];
		ans=1;LL p;while(1){
			p=query(T[x],1,B,ans);
			if (p>=ans) ans=p+1;else break;
		}
	}
	return 0;
}
内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值