2024 SDSC 提高班
模拟赛 #1
T1-risk
类原题:P3366 【模板】最小生成树
题意:给定
不难发现最后的集结过程一定是一棵树,所以最小代价为此图的最小生成树的大小。
点击查看代码
int to[MAXN]; int go(int p){return (to[p]==p?p:to[p]=go(to[p]));} struct edge{ int s,e,d; }ed[MAXN]; int n,m; bool cmp(edge a,edge b){ return a.d<b.d; } signed main(){ n=read(),m=read(); for(int i=1;i<=m;i++) ed[i].s=read(),ed[i].e=read(),ed[i].d=read(); std::sort(ed+1,ed+m+1,cmp); for(int i=1;i<=n;i++) to[i]=i; int ans=0; int cnt=0; for(int i=1;i<=m;i++){//最小生成树 if(cnt==n-1)break; int p1=ed[i].s,p2=ed[i].e,d=ed[i].d; if(go(p1)!=go(p2)){ ans+=d; to[go(p1)]=go(p2); ++cnt; } } println(ans); return 0; }
T2-magic
首先考虑朴素的 DP,设
发现每次转移第一维没有贡献,可以用滚动数组将第一维滚掉。
点击查看代码
int n,m,k,x,y,dp[MAXN]; signed main(){ n=read(),m=read(),k=read(); memset(dp,0x3f,sizeof(dp)); dp[k]=0;//dp 初始化 for(int i=1;i<=m;i++){ x=read(),y=read(); int nowx=dp[x],nowy=dp[y];//注意:先存下 dp[x],dp[y] 的值 dp[x]=std::min(nowx+1,nowy); dp[y]=std::min(nowx,nowy+1);//dp 的转移 } for(int i=1;i<=n;i++) put((dp[i]>m?-1:dp[i]),i,n); return 0; }
T3-letters
原题:CF gym105214 E. Enumerating Substrings
注意特殊性质 所有字母出现次数都不超过两次
,不难发现,该字符串的 border 一定不会超过字符串的一般且 border 存在的话有且只有一个。
考虑枚举 border 的长度,形式化地写成 ABA 的形式,则 A 中的字符在 B 中一定不会出现,所以只需要枚举 border。注意特判
最后容斥一下不相交的情况即可。
T4-stars
原题:Baekjoon-23702 Three Dimensions
首先考虑特殊性质 my_a=my_b=mz_a=mz_b=0
的情况,则只需要考虑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!