2024.7.26模拟赛8

news/2024/9/23 7:27:35/文章来源:https://www.cnblogs.com/ppllxx-9G/p/18332102

模拟赛

抽象比赛,含金量最高的是题目背景?

好像还是连续的。。。

T1 Same Integers

题目背景

签到题,因为只有加操作,目标是将两个较小的数加成最大的。

根据差的奇偶判断能否加二得到,如果不能先加一调一下。(简单题,题解抽象一点也没事吧)

code
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e5+5;
LL a[3],ans;
int main()
{for(int i=0;i<3;i++) scanf("%lld",&a[i]);sort(a,a+3);int x=a[2]-a[0],y=a[2]-a[1];if((x&1) && (y&1)) ans=(x-1>>1)+(y-1>>1)+1;else if(x&1) ans=(y>>1)+(x+1>>1)+1;else if(y&1) ans=(x>>1)+(y+1>>1)+1;else ans=(x>>1)+(y>>1);printf("%lld\n",ans);return 0;
}

T2 Qpwoeirut and Vertices

首先要想到建立最小生成树,因为我们只在乎使某个连通块第一次被连通的边,后面再加边都可以忽略,所以最终建出的一定是一棵树。

然后考虑答案是什么,将边的编号赋成边权,那么使 \(u,v\) 连通的边权最大的边就是答案,也就是路径最大值。

使 \([l,r]\) 连通也很简单,就是使每两个相邻的节点连通,然后取区间最大值。

路径最大值可以用树剖 + ST 表,区间最值也用 \(ST\) 维护就好,发现是数据结构裸题。

正解是新科技:克鲁斯卡尔重构树

不同于最小生成树,克鲁斯卡尔重构树是对于每一条边建一个虚点,点权等于原边权,虚点向原边的两个端点所在连通块的代表点连边。

因为加边按顺序,所以这样重构的树(森林)从根到叶子的权值一定是单调不上升的,那么使两点连通的最小权值就是重构树离他们最近的祖先的点权

LCA + ST 表即可。

code(ST + ST)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int t;
int n,m,q;
struct K {int u,v,w;} k[N<<1];
inline bool cmp(const K &x,const K &y) {return x.w<y.w;}
int head[N],tot;
struct E {int u,v,w;} e[N<<1];
inline void add(int u,int v,int w) {e[++tot]={head[u],v,w}; head[u]=tot;}
struct BCJ
{int fa[N];inline void init() {for(int i=1;i<=n;i++) fa[i]=i;}inline int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]);}	
} bcj;int dfn[N],dep[N],son[N],sz[N],cnt,rk[N],fa[N],top[N],a[N];void dfs1(int u,int f)
{dep[u]=dep[f]+1; son[u]=-1; sz[u]=1; fa[u]=f;for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v==f) continue;a[v]=e[i].w;dfs1(v,u);sz[u]+=sz[v];if(son[u]==-1||sz[son[u]]<sz[v]) son[u]=v;}
}
void dfs2(int u,int t)
{top[u]=t; dfn[u]=++cnt; rk[cnt]=u;if(son[u]==-1) return;dfs2(son[u],t);for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v!=son[u]&&v!=fa[u]) dfs2(v,v);}
}
struct ST1
{int st[30][N];inline void bui(){for(int i=1;i<=n;i++) st[0][i]=a[rk[i]];for(int i=1;i<=25;i++) for(int j=1;j+(1<<i)-1<=n;j++)st[i][j]=max(st[i-1][j],st[i-1][j+(1<<i-1)]);}inline int que(int l,int r){int k=__lg(r-l+1);return max(st[k][l],st[k][r-(1<<k)+1]);}
} st;
int Que(int x,int y)
{int res=0;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);res=max(res,st.que(dfn[top[x]],dfn[x]));x=fa[top[x]];}if(x==y) return res;if(dep[x]>dep[y]) swap(x,y);res=max(res,st.que(dfn[x]+1,dfn[y]));return res;
}
struct ST2
{int st[30][N];inline void bui(){for(int i=1;i<n;i++) st[0][i]=Que(i,i+1);for(int i=1;i<=25;i++) for(int j=1;j+(1<<i)-1<n;j++)st[i][j]=max(st[i-1][j],st[i-1][j+(1<<i-1)]);}inline int que(int l,int r){int k=__lg(r-l+1);return max(st[k][l],st[k][r-(1<<k)+1]);}
} st2;
void init()
{cnt=0; tot=0;memset(head,0,sizeof(head));
}
int main()
{
//	freopen("lagrange3.in","r",stdin);
//	freopen("o1.out","w",stdout);scanf("%d",&t);while(t--) {init();scanf("%d%d%d",&n,&m,&q);  bcj.init();for(int i=1;i<=m;i++){int x,y; scanf("%d%d",&x,&y);k[i]={x,y,i};}for(int i=1;i<=m;i++){int fx=bcj.find(k[i].u),fy=bcj.find(k[i].v);if(fx!=fy) bcj.fa[fx]=fy,add(k[i].u,k[i].v,k[i].w),add(k[i].v,k[i].u,k[i].w);}dfs1(1,0); dfs2(1,1);st.bui(); st2.bui();while(q--){int x,y; scanf("%d%d",&x,&y);if(x==y) printf("0\n");else printf("%d\n",st2.que(x,y-1));}	}return 0;
}
code(重构树)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int t,q,n,m;
struct K {int u,v;} k[N];
int head[N],tot,num,w[N],fa[30][N],dep[N],a[N];
struct E {int u,v;} e[N<<1];
inline void add(int u,int v) {e[++tot]={head[u],v}; head[u]=tot;}
struct BCJ
{int fa[N];void bui(){for(int i=1;i<=(n<<1);i++) fa[i]=i;}inline int find(int x){if(x!=fa[x]) fa[x]=find(fa[x]);return fa[x];}
} bcj;
void dfs(int u,int f)
{dep[u]=dep[f]+1; fa[0][u]=f;for(int i=1;i<=20;i++) fa[i][u]=fa[i-1][fa[i-1][u]];for(int i=head[u];i;i=e[i].u){int v=e[i].v; if(v==f) continue;dfs(v,u);}
}
int lca(int x,int y)
{if(dep[x]<dep[y]) swap(x,y);for(int i=20;i>=0;i--) if(dep[fa[i][x]]>=dep[y]) x=fa[i][x];if(x==y) return x;for(int i=20;i>=0;i--) if(fa[i][x]!=fa[i][y]) x=fa[i][x],y=fa[i][y];return fa[0][x];
}
struct ST
{int st[20][N];void bui(){for(int i=1;i<n;i++) st[0][i]=a[i];for(int i=1;i<=20;i++)for(int j=1;j<n;j++)st[i][j]=max(st[i-1][j],st[i-1][j+(1<<i-1)]);}int que(int l,int r){int k=__lg(r-l+1);return max(st[k][l],st[k][r-(1<<k)+1]);}
} st;
int main()
{// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&q); tot=0,num=n;for(int i=1;i<=m;i++) scanf("%d%d",&k[i].u,&k[i].v);for(int i=1;i<=n<<1;i++){bcj.fa[i]=i; head[i]=0; dep[i]=0;}for(int i=1;i<=m;i++){int fx=bcj.find(k[i].u),fy=bcj.find(k[i].v);if(fx==fy) continue;bcj.fa[fx]=bcj.fa[fy]=++num; w[num]=i;add(num,fx); add(num,fy);}for(int i=num;i>=n+1;i--)if(!dep[i]) dfs(i,0);for(int i=1;i<n;i++){int d=lca(i,i+1);a[i]=w[d];}st.bui();while(q--){int l,r; scanf("%d%d",&l,&r);if(l==r) printf("%d ",0);else printf("%d ",st.que(l,r-1));}printf("\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/774010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大道至简读后有感

《大道至简》读后有感 作为一名初学计算机语言的学生,在语言的学习过程中,总会有各种问题困扰我。在阅读《大道至简》这本经典软件工程读物之前,我过去常常是追求复杂性和繁琐的代码设计。因为我觉得这样能体现我的个人水平,更“高级”之类的,我会为了实现某个功能而不断添…

mongodb数据库范围分片数据分布不均匀

【说明】 当前使用mongodb分片,三个分片mongos> sh.status() --- Sharding Status --- sharding version: {"_id" : 1,"minCompatibleVersion" : 5,"currentVersion" : 6,"clusterId" : ObjectId("66a30ccca62de41d6b0241a4&…

Markdown排版规范

Markdown 语法虽然多,但随便乱用的话反而会显得不美观,本文就推荐一些常见的排版规则。Markdown 语法虽然多,但随便乱用的话反而会显得不美观,本文就推荐一些常见的排版规则。 ‍ ‍ Markdown 标记的使用规范 ‍ 标题一级标题,通常是用来写文章的标题。而大部分情况下,文…

便宜的和贵的 SSL 证书有什么区别?

在网络世界中,SSL 证书如同守护网站安全的忠诚卫士,确保数据在传输过程中的保密性和完整性。然而,当我们在选择 SSL 证书时会发现,其价格参差不齐,从免费到昂贵,跨度较大。那么,便宜的 SSL 证书和贵的 SSL 证书到底有哪些显著的区别呢? 验证级别和审核流程 首先,验证方…

在 Visual Studio 2022 中,开发 ASP.NET 网站并在 Windows Server 2003 中进行部署

一、ASP.NET 网站程序开发 新建项目类型:ASP.NET Web 应用程序(.NET Framework) 引用包:Microsoft.AspNet.WebApi、Microsoft.AspNet.Mvc,版本:4.0.X 创建文件:Global.asax 启动代码: public class WebApiApplication : HttpApplication {protected void Application_S…

stable diffusion 入门教程

sd基础 工作原理&入门输入提示词后 有文本编码器将提示词编译成特征向量,vae编码器将特征向量传入潜空间内,特征向量在潜空间内不断降噪,最后通过vae解码器将降噪之后的特征向量 解码成一个个像素组成的图片 一般选中默认vae模型解码编码的模型CLIP值越大,提前停止的越…

雷达气象学(5)——多普勒天气雷达的原理

目录5.1 多普勒效应和多普勒频移5.2 最大不模糊速度和速度模糊5.2.1 脉冲对处理技术5.2.2 最大不模糊速度5.2.3 速度模糊5.2.4 速度退模糊算法5.3 最大不模糊距离和距离折叠5.3.1 最大不模糊距离5.3.2 距离折叠5.3.3 距离去折叠的方法5.4 多普勒两难5.5 WSR-88D 的取样技术 5.1…

在macOS开发stm32:CubeIDE+CubePro方案

STM32CubeIDE和STM32CubeProgrammer都有Mac版。 STM32CubeIDE用于创建项目和编写代码,编译出HEX文件。 STM32CubeProgrammer用于连接ST-Link v2和烧录程序,把HEX文件下载到STM32单片机。 在安装STM32CubeIDE和STM32CubeProgrammer时,会把相关驱动下载安装。所以,等我安装完…

[HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding

0 引言在近期项目一场景中,一 Web API (响应内容:7MB - 40MB、数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s。 在这个场景中,前端的问题暂且不表。那么针对后端的问题,个人认为还是有较大的优化空间:1)启用HTTP 内容压缩策略…

Zabbix 5.0 LTS 配置企业微信(Webhook)自动发送告警信息

依据前面文章《Zabbix 5.0 LTS URL 健康监测》环境,实现企业微信(Webhook)自动发送告警信息。 一、创建企业微信机器人先在自己的企业微信群里创建一个机器人,并获取其 WebHook 地址。右击群聊天卡片,添加群机器人。 获得一个类似下图的 WebHook 地址。注意,这个 WebHook 地…

【逆运动学2】damped least squares method阻尼最小二乘法

逆运动学逆运动学,就是从操作空间的end effector position and orientation,求关节空间的joint position的问题。在之前的文章,我们简单提到求逆运动学解的解析解法和优化解法,详细讲解了用逆瞬时(或说微分)运动学即雅可比矩阵法迭代求解逆运动学的方法。这篇文章我们继续…