2024.7.25模拟赛7

news/2024/9/23 13:28:25/文章来源:https://www.cnblogs.com/ppllxx-9G/p/18326574

模拟赛

疯狂补题解/改题中。。。

T1 [Permutations & Primes] (未找到)

构造一个 \(1-n\) 的序列,使所有区间中 \(mex\) 为质数的最多。

感觉题不是很好。结论是:\(1\) 放中间,\(2,3\) 放两边。

打标找规律,感性证明也挺显然的。

no code

T2 Spread of Information

首先看道典题:消防局的设立

题很水,但是思路一样,半径为 \(k\) 的最小覆盖问题就是跳 \(k\) 级祖先。

采用贪心的策略,每次找到没有被覆盖的最深的点,向上跳 \(k\) 级祖先,使当前没被覆盖的这个点刚好被覆盖。

但是这道题暴跳肯定不行,因为跳跃过程中要更新最小距离,倍增也不太好搞。

所以我们稍微变一下思路,还是跳祖先,跳到祖先直接 dfs 把能覆盖的点都标记。这样被标记的点一定不会再被跳。

虽然看着很暴力,但真的很快,而且卡不掉?

code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,k,a[N],dep[N],fa[N];
int head[N],tot;
struct E {int u,v;} e[N<<1];
inline void add(int u,int v) {e[++tot]={head[u],v}; head[u]=tot;}
inline int qr()
{char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;
}
inline void dfs(int u,int f)
{dep[u]=dep[f]+1; a[u]=u; fa[u]=f;for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v==f) continue;dfs(v,u);}
}
inline bool cmp(int x,int y) {return dep[x]>dep[y];}
bool vs[N];
inline void fg(int u,int f,int d,int mid)
{if(d>mid) return;vs[u]=1;for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v==f) continue;fg(v,u,d+1,mid);}
}
inline bool check(int mid)
{int res=0;for(int i=1;i<=n;i++) vs[i]=0;for(int i=1;i<=n;i++) if(!vs[a[i]]){int u=a[i],jp=mid;while(fa[u]&&jp) u=fa[u],jp--;fg(u,0,0,mid);res++;if(res>k) return 0;		}return 1;
}
int main()
{n=qr(); k=qr();for(int i=1;i<n;i++){int x=qr(),y=qr();add(x,y); add(y,x); }dfs(1,0);sort(a+1,a+1+n,cmp);int l=1,r=dep[a[1]],ans=r;while(l<=r){int mid=l+r>>1;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);return 0;
}

还可以倍增优化一下暴跳,好像变慢了。

倍增code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,k,a[N],dep[N],fa[20][N],lg;
int head[N],tot;
struct E {int u,v;} e[N<<1];
inline void add(int u,int v) {e[++tot]={head[u],v}; head[u]=tot;}
inline int qr()
{char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;
}
inline void dfs(int u,int f)
{dep[u]=dep[f]+1; a[u]=u; fa[0][u]=f;for(int i=1;i<=lg;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);}
}
inline bool cmp(int x,int y) {return dep[x]>dep[y];}
bool vs[N];
inline void fg(int u,int f,int d,int mid)
{if(d>mid) return;vs[u]=1;for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v==f) continue;fg(v,u,d+1,mid);}
}
inline bool check(int mid)
{int res=0;for(int i=1;i<=n;i++) vs[i]=0;for(int i=1;i<=n;i++) if(!vs[a[i]]){int u=a[i];for(int j=lg;j>=0;j--) if(fa[j][u]&&dep[fa[j][u]]>=dep[a[i]]-mid) u=fa[j][u];fg(u,0,0,mid);res++;if(res>k) return 0;		}return 1;
}
int main()
{
//	freopen("in.in","r",stdin);n=qr(); k=qr(); lg=__lg(n);for(int i=1;i<n;i++){int x=qr(),y=qr();add(x,y); add(y,x); }dfs(1,0);sort(a+1,a+1+n,cmp);int l=1,r=dep[a[1]],ans=r;while(l<=r){int mid=l+r>>1;if(check(mid)) ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);return 0;
}

T3 Ball Collector

一开始想二分图,树上遍历同时跑匈牙利。后来 GGrun 证明可以,HACK 之后 \({mathbb{MLE}}\)

其实思路还是类似的,将同一个节点的两个颜色连边。

观察得性质,每选一个节点的颜色就相当于选一条边,如果边数大于颜色点数,那么一定可以选中所有颜色。否则有多少条边就能选多少种颜色。

因此对于我们以颜色为点建的图中,答案就是 \(\min(点数,边数)\)

然后考虑实时维护这个图。用到新科技:可撤销并查集

其实原理很简单,就是在树上递归到一个点时记录这个状态,回溯时把它回归这个状态。

查询时不能路径压缩,合并时需要按秩合并(类似启发式合并,浅的合并到深的里,本题 \(sz\) 越大越深)。

好像挺简单的?

code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,ans[N],res,a[N],b[N],fa[N],sz[N],ed[N];
int head[N],tot;
struct E {int u,v;} e[N<<1];
inline void add(int u,int v) {e[++tot]={head[u],v}; head[u]=tot;}
int find(int x) {return fa[x]==x?x:find(fa[x]);}
struct A {int x,fa,sz,e;} g[N];
void merge(int u,int v,stack<A> &st,int &ans)
{u=find(u); v=find(v);st.push(A{u,fa[u],sz[u],ed[u]});st.push(A{v,fa[v],sz[v],ed[v]});if(u==v){ed[u]++;if(ed[u]==sz[u]) res++;return;}if(sz[u]<sz[v]) swap(u,v);ans-=min(sz[u],ed[u]); res-=min(sz[v],ed[v]);fa[v]=u; sz[u]+=sz[v]; ed[u]+=ed[v]+1;ans+=min(sz[u],ed[u]);
}
void dfs(int u,int f)
{stack<A> st; int tmp=res;merge(a[u],b[u],st,res);ans[u]=res;for(int i=head[u];i;i=e[i].u){int v=e[i].v;if(v==f) continue;dfs(v,u);}while(!st.empty()){A pre=st.top(); st.pop();fa[pre.x]=pre.fa;sz[pre.x]=pre.sz;ed[pre.x]=pre.e;}res=tmp;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);for(int i=1;i<n;i++){int x,y; scanf("%d%d",&x,&y);add(x,y); add(y,x);}for(int i=1;i<=n;i++) fa[i]=i,sz[i]=1,ed[i]=0;dfs(1,0);for(int i=2;i<=n;i++) printf("%d ",ans[i]);return 0;
}

T4 Joker

先挂张图,咕咕咕。。。

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

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

相关文章

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题,他们在给甲方做自动化报表工具,项目已经基本做好了,但拿给最终甲方,业务人员不太买账,项目经理为此也是天天抓狂,没有想到合适的应对方案。 现阶段主要面临的问题是项目经理和甲方沟通好了需求,就布置了任务,让研发去调研。但…

电影《死侍与金刚狼》迅雷高清版下载/百度云资源下载3.58GB磁力种子分享

在漫威电影宇宙的浩瀚星海中,每一个超级英雄都承载着独特的使命与故事,而《死侍与金刚狼》这部电影,则以其独特的幽默风格、深刻的情感内核以及对多元宇宙概念的巧妙运用,成为了近年来备受瞩目的佳作。本片不仅是对两位经典角色死侍与金刚狼深厚友谊的致敬,更是对漫威电影…

文件系统(十一):Linux Squashfs只读文件系统介绍

liwen01 2024.07.21 前言 嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省空间的目的。 另外还有个特性就是它可以分块解压缩,使用数…

《抓娃娃》电影迅雷百度云下载/HD2.59GB高清版磁力种子资源

电影《抓娃娃》自2024年7月16日在中国大陆上映以来,迅速成为暑期档的一部热门影片。该片由闫非和彭大魔联合执导,沈腾和马丽领衔主演,以其独特的剧情设定和深刻的家庭教育主题,引发了广泛的讨论和关注。本文将从影片的基本信息、剧情解析、演员表现、主题探讨以及观众反馈等…

C# 网络编程:.NET 开发者的核心技能

原文:C# 网络编程:.NET 开发者的核心技能 - 小码编匠 - 博客园 (cnblogs.com)一、HTTP 请求 HTTP(Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,主要用于从万维网服务器传输超文本到本地浏览器的传输协议。 在C#中,处理HTTP请求有多种方式,从传统…

转行自我介绍思路参照

一 面试官你好 很高兴来参加这次的面试沟通,我自从毕业以来从事的是IT行业的软件测试工作, 这些年的工作让我系统的掌握了软件测试的技能和优秀的与人沟通的能力。那么过往的工作呢 也取得了不错的成绩, 那么也是一路从测试工程师到高级测试。 二、但是比较遗憾的是,在…

NPU 芯片技术杂谈

NPU 芯片技术杂谈 对于AI芯片并无明确统一的定义,广义上所有面向人工智能(Artificial Intelligence,AI),包括Training(训练)和Inference(推理)应用的芯片都可以被称为AI芯片。参考文献链接 https://www.zhihu.com/question/64895191 https://zhuanlan.zhihu.com/p/7992114…

windows 如何暂停更新

使用windows 系统的伙伴都深受其扰,动不动就要强制更新,并且无法长时间关闭更新。这里推荐一个工具来禁止更新。 下载地址 https://github.com/WereDev/Wu10Man/releases

珂朵莉树

好文章 个人理解:珂朵莉树其实就是\(set\)大法,就是暴力,可以构造特殊数据卡掉,但是在随机数据的情况下,它是非常快的 struct ASD {ll l,r;mutable ll val;//方便更改,指针是常量,必须加上mutablebool operator < (const ASD& A)const{return l<A.l;}ASD(ll a,ll…

云原生 .NET Aspire 8.1 新增对 构建容器、编排 Python的支持

.NET Aspire 用于云原生应用开发,提供用于构建、测试和部署分布式应用的框架,这些应用通常利用微服务、容器、无服务器体系结构等云构造。2024年7月23日宣布的新 8.1 版本是该平台自 5 月正式发布以来的第一次重大更新,Microsoft 对 .NET Aspire 的第一个重大更新Aspire 8.1…

读零信任网络:在不可信网络中构建安全系统04最小特权

最小特权1. 公钥基础设施 1.1. PKI 1.2. 数字证书本身并不能解决身份认证问题 1.2.1. 需要一种方法来验证获得的公钥的确属于某人 1.2.2. 公钥基础设施(PKI)解决了这个问题 1.3. PKI定义了一组角色及其职责,能够在不可信的网络中安全地分发和验证公钥 1.4. PKI的目标是允许无…

Linux工作原理13用户环境

13用户环境 本书主要关注 Linux 系统中通常作为服务器进程和交互式用户会话基础的部分。但是,系统和用户最终还是要在某个地方相遇。在这一点上,启动文件扮演着重要角色,因为它们为 shell 和其他交互式程序设置了默认值。它们决定了用户登录时系统的行为方式。 大多数用户不…