2025多校冲刺省选模拟赛8

2025多校冲刺省选模拟赛8

\(T1\) A. 波斯菊 \(10pts/10pts\)

  • 每个连通块内以关键点为起点的最长路径 \(d_{i}\) 相互独立,有 \(2n-2k-\sum\limits_{i=1}^{k}d_{k}\) 即为所求。

  • 观察到可以直接钦定每个关键点距离其最远的点的是哪个点,这样的话就只需要任意两个路径不相交就能保证一定存在一种划分方案合法。

  • \(f_{x,0/1/2}\) 分别表示以 \(x\) 为根的子树内只有一个起点在往上走/只有一个终点在往上走(不一定要被匹配到)/没有点在往上走的答案。

  • 转移时考虑从两棵子树内的节点转移而来,特殊处理关键点处的转移。

    点击查看代码
    struct node
    {ll nxt,to;
    }e[1000010];
    ll head[500010],vis[500010],f[3][500010],cnt=0;
    void add(ll u,ll v) 
    {cnt++;e[cnt].nxt=head[u];e[cnt].to=v;head[u]=cnt;
    }
    void dfs(ll x,ll fa)
    {ll maxx,sum=0,u=-0x3f3f3f3f3f3f3f3f,v=-0x3f3f3f3f3f3f3f3f;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa){dfs(e[i].to,x);sum+=max(f[1][e[i].to],f[2][e[i].to]);}}if(vis[x]==1){f[1][x]=sum;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa){f[0][x]=max(f[0][x],sum-max(f[1][e[i].to],f[2][e[i].to])+f[0][e[i].to]);f[2][x]=max(f[2][x],sum-max(f[1][e[i].to],f[2][e[i].to])+f[0][e[i].to]);}} }else{f[0][x]=1;f[1][x]=-0x3f3f3f3f3f3f3f3f;f[2][x]=sum;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa){maxx=max(f[1][e[i].to],f[2][e[i].to]);f[0][x]=max(f[0][x],sum-maxx+f[0][e[i].to]+1);f[1][x]=max(f[1][x],sum-maxx+f[1][e[i].to]+1);f[2][x]=max({f[2][x],sum-maxx+f[1][e[i].to]+1+u,sum-maxx+f[0][e[i].to]+1+v});u=max(u,f[0][e[i].to]-maxx);  v=max(v,f[1][e[i].to]-maxx);}}}
    }
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("coreopsis.in","r",stdin);freopen("coreopsis.out","w",stdout);
    #endifll n,k,x,u,v,i;cin>>n>>k;for(i=1;i<=k;i++){cin>>x;vis[x]=1;}for(i=1;i<=n-1;i++){cin>>u>>v;add(u,v);  add(v,u);}dfs(x,0);cout<<2*n-2*k-max({f[0][x],f[1][x],f[2][x]})<<endl;return 0;
    }
    

\(T2\) B. 芦荀花 \(60pts/60pts\)

  • 连通块数 \(-1\) 即为所求。

  • 部分分

    • \(50 \sim 60pts\)
      • 连通块数等于边数减点数,考虑差的来源是由于连通块顶部的点导致的。稍微卡卡常,时间复杂度为 \(O(nm)\)

        点击查看代码
        int fa[500010],dfn[500010],pos[500010],vis[500010],tot=0;
        pair<int,int>a[500010];
        vector<int>e[500010];
        void add(int u,int v)
        {e[u].push_back(v);
        }
        void dfs(int x,int father)
        {tot++;  dfn[x]=tot;  pos[tot]=x;fa[x]=father;for(int i=0;i<e[x].size();i++){if(e[x][i]!=father)  dfs(e[x][i],x);}
        }
        int main()
        {
        #define Isaac
        #ifdef Isaacfreopen("fructus.in","r",stdin);freopen("fructus.out","w",stdout);
        #endifint n,m,b,ans=0,u,v,i,j,k;scanf("%d%d%d",&n,&m,&b);for(i=1;i<=n-1;i++){scanf("%d%d",&u,&v);add(u,v);  add(v,u);}for(i=1;i<=n;i++)  sort(e[i].begin(),e[i].end());dfs(1,0);for(;m>=1;m--){scanf("%d",&k);   ans*=b;for(i=1;i<=k;i++){scanf("%d%d",&a[i].first,&a[i].second);a[i].first^=ans;  a[i].second^=ans;for(j=a[i].first;j<=a[i].second;j++)  vis[pos[j]]=1;}ans=-1;for(i=k;i>=1;i--)  {for(j=a[i].second;j>=a[i].first;j--)  {vis[pos[j]]=0;ans+=(vis[fa[pos[j]]]==0);}}printf("%d\n",ans);}return 0;
        }
        
      • 若连通块内部已经连通是容易处理的,取 \(\operatorname{LCA}\) 判断即可。按照 \(DSF\) 序记录叶子节点后划分成若干条链后时间复杂度瓶颈不在判断某个点是否被选中,即使优化也没有什么大的用处,时间复杂度为 \(O(mt)\) ,其中 \(t\) 为叶子个数。

        • 貌似把拆分成链转换成拆分成子树就可以通过 \(Subtest7,k=1\) 的测试点。
        点击查看代码
        int fa[500010],dfn[500010],vis[500010],tot=0;
        pair<int,int>a[500010];
        vector<int>e[500010],leaf;
        void add(int u,int v)
        {e[u].push_back(v);
        }
        void dfs(int x,int father)
        {int flag=0;tot++;  dfn[x]=tot;fa[tot]=dfn[father];for(int i=0;i<e[x].size();i++){if(e[x][i]!=father)  {flag=1;dfs(e[x][i],x);}}if(flag==0)  leaf.push_back(dfn[x]);
        }
        int main()
        {
        #define Isaac
        #ifdef Isaacfreopen("fructus.in","r",stdin);freopen("fructus.out","w",stdout);
        #endifint n,m,b,ans=0,tmp,u,v,i,j,k;scanf("%d%d%d",&n,&m,&b);for(i=1;i<=n-1;i++){scanf("%d%d",&u,&v);add(u,v);  add(v,u);}for(i=1;i<=n;i++)  sort(e[i].begin(),e[i].end());dfs(1,0);for(;m>=1;m--){scanf("%d",&tmp);  k=1;  ans*=b;for(i=1;i<=tmp;i++){scanf("%d%d",&a[i].first,&a[i].second);a[i].first^=ans;  a[i].second^=ans;for(j=a[i].first;j<=a[i].second;j++)  vis[j]=1;if(i>=2){if(a[i].first==a[k].second+1)  a[k].second=a[i].second;else{k++;a[k]=a[i];}}}ans=-1;u=lower_bound(leaf.begin(),leaf.end(),a[k].first)-leaf.begin();v=upper_bound(leaf.begin(),leaf.end(),a[k].second)-leaf.begin()-1;for(i=k;i>=1;i--){while(leaf[u-1]>=a[i].first&&u-1>=0)  u--;while(leaf[v]>a[i].second&&v>=0)  v--;if(u>v)  ans+=(vis[fa[a[i].first]]==0);else {for(j=u;j<=v;j++){ans+=((vis[fa[(j==u)?a[i].first:(leaf[j-1]+1)]])==0);}if(a[i].second!=leaf[v])  ans+=(vis[fa[leaf[v]+1]]==0);}for(j=a[i].first;j<=a[i].second;j++)  vis[j]=0;}printf("%d\n",ans);}return 0;
        }
  • 正解

\(T3\) C. 豆蔻花 \(0pts/0pts\)

总结

  • \(T1\) 读假题了,以为同时可以移动 \(k\) 个石子,最后的式子多一个连通块大小,直接假了。
  • 没想到 \(T2\) 主席树维护二维数点的暴力做法。

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

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

相关文章

为什么选择持续绩效管理(CPM)

组织变革和发展的关键始于你的员工基础。要想在组织中建立一个不断发展和创新的环境,你必须确保你的员工是以目标、绩效和反馈为导向的。 #持续绩效管理#鼓励上级和下级之间建立直接的双向沟通。一个持续的绩效评估可以确保平稳有效的联系,随着时间的推移,可以看到更好的结果…

unity直接安装插件

一共三步 1.窗口->包管理器2. 在弹出的界面里点左上角的加号 依次解读选项为disk 文件夹(zip压缩文件请提前解压)tarball 压缩包(只支持tar压缩包)git URL 网址下载(国内应该得设置代理)by name 指定软件和版本下载 3.以disk为例,进入解压的地方选中package.json接着…

北航计网课程笔记-四、网络层

第四章 网络层 本章重点 1、IP数据报的格式和分片 2、IP地址的表示和分类分配、子网掩码、地址有效性、广播地址 3、子网划分 4、CIDR路由聚合 5、ARP协议和ICMP协议 6、路由表、路由器的工作原理 7、RIP协议和OSPF协议 8、网络层的综合设计和应用 网络层的功能 网络层的主要任…

北航计网课程笔记-六、应用层

第六章 应用层 应用层概述 应用层对应用程序的通信提供服务。应用层的功能:文件传输、访问和管理 电子邮件 虚拟终端 查询服务和远程作业登录应用层的重要协议FTP SMTP、POP3 HTTP DNS网络应用模型 客户/服务器模型C/S客户是服务请求方,服务器是服务提供方 Web、FTP、远程登录…

北航计网课程笔记-七、一些总结

复习到最后想开摆了,也没总结啥,只是一些格式……一些总结MAC帧格式IP数据报格式 IP首部20B~60B IP总长最多65535BTCP报文格式 TCP首部20B~60B 数据部分最多65535-20-20 = 65495BUDP报文格式UDP&TCP伪首部格式HTTP报文格式

北航计网课程笔记-一、概述

写在前面:本笔记根据王道408完成,北航软院不考的内容不在其中。 总之复习期末把王道刷一遍就行了。 个人学习用,如有错误敬请指正。第一章 概述 计算机网络概念 计算机网络的定义:一些互联的、自治的计算机的集合,主体是多台计算机,媒介为通信媒介, 目的是通信与资源共享…

北航计网课程笔记-二、物理层

第二章 物理层 物理层的任务:将原始的比特流从一台机器上传输到另一台机器上。 确定与传输媒体的接口特性:机械、电气、功能、规程通信基础 一些基本概念数据,信号和码元数据是传送信息的实体;信号是数据的电气或电磁表现;码元是数字通信中数字信号的计量单位,1码元可以携…

Winform和MFC的一个区别

前段时间我嫌桌面快捷键太多,我使用C语言用MFC制作了桌面自定义系统(上图左),可是这个系统存在一些问题,比如(下图) 默认情况下它的右上角没有最大化和最小化的按钮,而Winform是有的(下图)。 还有一个问题:在任务栏,点击时MFC不能最小化,而Winform可以;还有一个很…

应用中的 PostgreSQL项目案例

title: 应用中的 PostgreSQL项目案例 date: 2025/2/3 updated: 2025/2/3 author: cmdragon excerpt: 随着大数据和云计算的兴起,企业在数据管理和数据分析方面面临着越来越复杂的挑战。PostgreSQL 作为一个开源关系型数据库,凭借其卓越的扩展性和强大的功能,逐渐成为众多企业…

来自aakennes的新年祝福

来自aakennes的新年祝福组题人: @aakennes \(A\) P888. 字符串会上树 \(AC\)基础字符串。点击查看代码 string s,t="",w=""; map<string,string>f; int main() { // #define Isaac #ifdef Isaacfreopen("in.in","r",stdin);fr…

1.3 决定程序流程的程序计数器

CPU先执行0100 CPU每执行一个指令,程序计数器的值就会自动加1 CPU的控制器就会参照程序计数器的数值,从内存中读取命令并执行。 程序计数器决定着程序的流程

【每日一题】20250203

你是万千星球的星球! 你是沸腾的准则!你是精心保存的潜伏的萌芽!你是核心!【每日一题】我国发射的“天宫一号”和“神州八号”在对接前,”天宫一号”的运行轨道高度为 \(350 \; \mathrm{km}\),“神州八号”的运行轨道高度为 \(343 \; \mathrm{km}\).它们的运行轨道均视为…