福州市 2025 国庆集训 Day1 前三题题解

news/2025/10/1 15:50:14/文章来源:https://www.cnblogs.com/Atserckcn/p/19122490

福州市 2025 国庆集训 Day1 前三题题解

别问为啥只有前三题,因为后面我不会……

Day1 题单

T1 旅行

传送门

注意到 \(P\) 非常小,所以可以考虑指数级别的做法。

考虑状压 dp。设 \(f_{s,u}\) 表示经过 \(P\) 内的点集为 \(s\),当前位于 \(P\) 中第 \(u\) 号点的最短路径长度。

然而我们的路径其实是 \(1\rightarrow p_1\rightarrow \cdots \rightarrow p_n\rightarrow n\),所以其实点集的级别是 \(2^{p+2}\)

那么转移就是枚举 \(s\),然后枚举 \(s\) 内经过的点 \(i\),再枚举 \(s\) 内没经过的点 \(j\),得到新的状态 s'=s|(1<<j)

然后 \(f_{s',j}=\min \left\{f_{s,i}+dis_{p_i,p_j}\right\}\)。其中 \(dis_{p_i,p_j}\) 表示点 \(p_i\) 到点 \(p_j\) 的最短路径长度。可以用 Floyd 预处理出来。

最后的答案显然就是 \(f_{2^{p+2}-1,p+1}\)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ljl;
const int N=205,M=1e4+5,P=15;
const ljl inf=1e18;
int n,m,p,vec[N],cur=1;
ljl dis[N][N],ans,f[(1<<P)+5][N];
bool vis[N];
int main(){ios::sync_with_stdio(0);cin>>n>>m;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(i!=j)dis[i][j]=inf;for(int i=1;i<=m;++i){ljl u,v,w;cin>>u>>v>>w;dis[u][v]=dis[v][u]=min(dis[u][v],w);}cin>>p;for(int i=1;i<=p;++i){cin>>vec[i];vis[vec[i]]=1;}vec[0]=1;vec[p+1]=n;for(int k=1;k<=n;++k)for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);memset(f,0x3f,sizeof(f));f[1][0]=0;for(int i=0;i<(1<<p+2);++i){for(int j=0;j<p+2;++j){if(!((i>>j)&1))continue;for(int k=0;k<p+2;++k){if((i>>k)&1)continue;f[i|(1<<k)][k]=min(f[i|(1<<k)][k],f[i][j]+dis[vec[j]][vec[k]]);}}}ans=f[(1<<p+2)-1][p+1];if(ans>=inf)cout<<-1<<'\n';else cout<<ans<<'\n';return 0;
}

T2 种植

传送门

先看看如果不考虑 \(q_i\),那么就是个简单的 01 背包板子。

但是它有 \(q_i\) 啊?

我们可以尝试下,发现把 \(q_i\) 按照从大到小的顺序排序后依次插入是最优的。

证明听了,但不会。/kel。只懂把某个时间段移到前面,与前面的交换,则前面的也一定可以对答案做出贡献。所以不会更劣

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=305,T=2e4+5;
int n,t,f[T],ans;
struct NODE{int p,q,r;bool operator < (const NODE x)const{return q>x.q;}
}node[N];
int main(){ios::sync_with_stdio(0);cin>>n>>t;for(int i=1;i<=n;++i)cin>>node[i].p>>node[i].q>>node[i].r;sort(node+1,node+n+1);for(int i=1;i<=n;++i){for(int j=t-node[i].q;j>=node[i].p;--j){f[j]=max(f[j],f[j-node[i].p]+node[i].r);}}for(int i=1;i<=t;++i)ans=max(ans,f[i]);cout<<ans<<'\n';return 0;
}

T3 最短路

题目传送门

妙妙题。

考虑额外加边的本质是什么。

通过 T1,不难想到其实就是把数字化作二进制,看成集合,\(i\) 可以向 \(j\) 连边当且仅当 \(j\)\(i\) 的真子集。

那么考虑怎么优化建图。

比如说当前数字为 \((101)_2\),那么可以 \((101)_2\rightarrow (100)_2\),以及 \((101)_2\rightarrow (001)_2\)。其中边权均为 \(0\)

那么就有问题了:正常来说边权是 \(1\) 啊?

其实这些点都是虚图。点编号是从 \(n+1\) 开始的。

所以我们就建好了图。

注意,这样的话,需要开的点的大小是 \(2\times 10^5+2^{20}\),边是 \(3\times 10^5+2^{20}\times 20\)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+(1<<20)+5,M=3e5+(1<<20)*20+5;
int n,m,a[N],ehead[N],cnt_e,dis[N],maxa;
bool vis[N];
struct E{int to,w,pre;
}e[M];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > h;
void adde(int from,int to,int w)
{e[++cnt_e].to=to;e[cnt_e].w=w;e[cnt_e].pre=ehead[from];ehead[from]=cnt_e;return;
}
void dijk()
{memset(dis,0x3f,sizeof(dis));dis[1]=0;h.push(make_pair(dis[1],1));while(!h.empty()){int u=h.top().second;h.pop();if(vis[u])continue;vis[u]=1;for(int i=ehead[u];i;i=e[i].pre){int v=e[i].to,w=e[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v])h.push(make_pair(dis[v],v));}}}return;
}
int main(){ios::sync_with_stdio(0);cin>>n>>m;for(int i=1;i<=n;++i)cin>>a[i];for(int i=1,u,v;i<=m;++i){cin>>u>>v;adde(u,v,1);}for(int i=1;i<=n;++i)adde(i,n+a[i]+1,0),adde(n+a[i]+1,i,1),maxa=max(maxa,a[i]);for(int i=1;i<=maxa;++i)//set i{//set i->set j(j\in i)for(int j=0;j<20;++j){if((i>>j)&1)adde(n+i+1,n+(i^(1<<j))+1,0);}}dijk();for(int i=1;i<=n;++i)cout<<(dis[i]==0x3f3f3f3f?-1:dis[i])<<'\n';return 0;
}

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

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

相关文章

Python常用数据类型详解:字符串、列表、字典全解析

在 Python 学习过程中,理解数据类型是基础也是关键。Python 的核心数据类型能够帮助开发者高效处理不同类型的数据,本篇文章将系统介绍三种最常用的数据类型:字符串(String)、列表(List)、字典(Dict),并结合…

【自学笔记】Redis 飞快入门

【自学笔记】Redis 飞快入门pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

做网站工作室名字安徽二建标准

参考链接&#xff1a; Python中的私有变量 我们这里就直奔主题&#xff0c;不做基础铺垫&#xff0c;默认你有一些Python类的基础&#xff0c;大家在看这篇博客的时候&#xff0c;如果基础知识忘了&#xff0c;可以去菜鸟教程 从一个简单的类开始 class A(): #定义一…

强连通,Tarjan,缩点

在本文中,我们用 \(f(x,y)=1\) 来表示 \(x\) 可以到达点 \(y\),用 \(g(x,y)=1\) 表示 \(f(x,y)=1\) 且 \(f(y,x)=1\)。 I、强连通 对于图 \(U\) 上的任意两点 \(x\) 和 \(y\),如果有 \(g(x,y)=1\),那么称 \(x,y\) …

实用指南:K8s日志架构:Sidecar容器实践指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做网站时量宽度的尺子工具thinkphp做的网站源码

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

企业网站建设综合实训心得wordpress安装系统

http://home.cnblogs.com/blog/转载于:https://www.cnblogs.com/yanyanhappy/archive/2012/09/07/2675050.html

彩票网站自己可以做吗wordpress加密页面访问

文章目录 一、 Zookeeper常用命令1. zk服务命令2. zk客户端命令 二、HBASE常见运维命令1. 集群启动关闭2. 扩容增加regionserver3. 下线regionserver ing 一、 Zookeeper常用命令 例如&#xff1a;ZOOKEEPER_HOME&#xff1a;/opt/zk/zookeeper 1. zk服务命令 1. 启动ZK服务…

Python方案--交互式VR教育应用开发

Python方案--交互式VR教育应用开发pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

纯Qt代码实现onvif协议设备端/onvif设备模拟器/onvif虚拟监控设备/桌面转onvif

一、前言说明 在视频监控系统的开发中,ONVIF(Open Network Video Interface Forum)作为行业标准协议,被广泛应用于设备与平台之间的互联互通。通常我们认为,ONVIF 协议的设备端实现应运行在摄像头等嵌入式下位机上…

高中教做网站的软件表格制作教程 步骤

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

OI 笑传 #13

zatto今天是思维题大手子。 CF2130B 左转这个东西很烦,把它规约掉。 由于是一定要到 \(n\) 的,因此左转之后必须要右转,考虑单位元,也就是左走一格之后往右走一格是怎么个事。也就是多加一倍这两个格子里的数。 考…

*补*““逆元求组合数”(费马小定理

组合数快速求法 #include <bits/stdc++.h> #define ll long long #define MAXN 1010 using namespace std; namespace SHuxinn{ll pri[MAXN];ll ni[MAXN];ll ans1 , ans2;ll pow(ll a , ll b){ll ans = 1 , base…

C# WPF中Binding的 Source属性和ElementName属性有什么区别

好的,这是一个WPF数据绑定中非常核心和常见的问题。Source 和 ElementName 都是用来设置绑定源(即数据的来源)的属性,但它们的应用场景和灵活性有显著区别。 下面通过一个对比表格和详细解释来说明它们的区别。 核…

Typora to Obsidian 迁移助手 (Typora-to-Obsidian-Migration-Helper)

一个交互式的、基于状态机模式的 Python 脚本,旨在帮助用户安全、高效地将 Typora 笔记库迁移至 Obsidian。它将多个繁琐的手动步骤整合为一个自动化的、可控的流程。本脚本基于历史文章中模块程序组合而成,能够实现…

网站怎么做关键词搜索网站建设 无法打开asp

发送报文处理 增加一个功能码映射关系 //功能码映射关系public readonly Dictionary<string, byte> ReadFuncCodes = new Dictionary<string, byte>();<

二七网站建设网站分析与优化

每当MyBatis设置PreparedStatement的参数或从ResultSet中检索值时&#xff0c;都会使用TypeHandler以适合Java类型的方式来检索值。下表描述了默认的TypeHandlers。 自MyBatis 3.4.5版本起&#xff0c;默认支持JSR-310&#xff08;日期和时间API&#xff09;。 Type HandlerJ…

台州网站建设技术支持网站上的3d产品展示怎么做

目录 一、压力的方向(FORCE) 1、为正的情况 2、为负的情况 二、压强的方向(PRESSURE)

深入解析:【APK安全】敏感数据泄漏风险与防御指南

深入解析:【APK安全】敏感数据泄漏风险与防御指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

大型网站建设与维护过程学做家常菜的网站有哪些

1、过期删除策略 1.1、介绍 Redis 是可以对 key 设置过期时间的&#xff0c;因此需要有相应的机制将已过期的键值对删除&#xff0c;而做这个工作的就是过期键值删除策略。 每当我们对一个 key 设置了过期时间时&#xff0c;Redis 会把该 key 带上过期时间存储到一个过期字典…