当前位置: 首页 > news >正文

AtCoder Beginner Contest 447题解

真是手速场吧

D - Take ABC 2

很自然的想到倒叙匹配abc。

void solve(){cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='A')A.push_back(i);else if(s[i]=='B')B.push_back(i);else if(s[i]=='C')C.push_back(i);}int ans=0;while(C.size()){int p=C.back();C.pop_back();while(!B.empty()&&B.back()>p)B.pop_back();if(B.empty())break;int u=B.back();B.pop_back();while(!A.empty()&&A.back()>u)A.pop_back();if(A.empty())break;int v=A.back();A.pop_back();ans++;}cout<<ans;
}

E - Divide Graph

并查集。刚开始的时候陷入了一个思维误区,认为前两次不相连的边确定两个根。但是实际上,这个可以这样考虑,最开始一条边都没有,有n个连通块,问加几条边可以变成2个连通块。

int n,m;
vector<pii>g[N];
struct edge{int u,v,w;
}e[N];
int fa[N],pw[N];
int find(int x){if(x==fa[x])return x;return fa[x]=find(fa[x]);
}
bool cmp(edge x,edge y){return x.w>y.w;
}
bool vis[N];
void solve(){cin>>n>>m;pw[0]=1;up(i,1,m)pw[i]=pw[i-1]*2%mod;//cout<<pw[11]<<endl;int u,v;up(i,1,n)fa[i]=i;up(i,1,m){cin>>u>>v;e[i]={u,v,i};g[u].push_back({v,i});g[v].push_back({u,i});}sort(e+1,e+1+m,cmp);int cnt=n,rt1=0,rt2=0;int ans=0;for(int i=1;i<=m;i++){if(find(e[i].u)!=find(e[i].v)){if(cnt>2){fa[find(e[i].u)]=find(e[i].v);cnt--;}else{ans=(ans+pw[e[i].w])%mod;}}}cout<<ans;
}

F - Centipede Graph

树状dp。比较简单,转移情况就两种,一种是目前点的儿子是一条蜈蚣型的末端,另一种情况是则是直接转移该子树的最大值。

int n,m;
vector<int>g[N];int f[N][2],sn[N],fa[N];
void dfs(int u,int from){int maxl1=0,maxl2=0;if(sn[u]>=2)f[u][1]=1,f[u][0]=1;if(sn[u]>=1&&from!=0)f[u][0]=1;for(auto v:g[u]){if(v==from)continue;dfs(v,u);if(f[v][1]>=maxl1){maxl2=maxl1;maxl1=f[v][1];}else{if(f[v][1]>maxl2)maxl2=f[v][1];}f[u][0]=max(f[u][0],f[v][0]);}if(u==1){if(sn[u]>=4)f[u][0]=max(f[u][0],maxl1+maxl2+1);if(sn[u]==3)f[u][0]=max(f[u][0],maxl1+1);}else {if(sn[u]>=3)f[u][0]=max(f[u][0],maxl1+maxl2+1);if(sn[u]==2)f[u][0]=max(f[u][0],maxl1+1);}if(sn[u]>=3)f[u][1]=maxl1+1;
}
void dfs1(int u,int from){for(auto v:g[u]){if(v==from)continue;sn[u]++;dfs1(v,u);}
}
void solve(){cin>>n;int u,v;up(i,1,n-1){cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs1(1,0);dfs(1,0);cout<<f[1][0]<<endl;
}
http://www.jsqmd.com/news/425584/

相关文章:

  • 论行动本身的客观性——在AI元人文的视域下
  • AI IDE 的 Plan、Agent、Ask、Edit、Builder……到底在搞什么?一文讲透模式战争
  • AI驱动的9款降重工具,显著改善文本内容质量
  • 精选9大智能降重工具,让您的文本改写更轻松高效
  • 通过整合目录自动生成和内容优化功能,智能论文写作工具帮助研究者提高效率,减少时间消耗。
  • 26spring做题记录 - March - Amy
  • 【含文档+PPT+源码】基于java web的篮球馆管理系统系统的设计与实现
  • AI智能降重工具Top9推荐,轻松实现文本优化与高效改写
  • langchain和langgraph备忘录
  • 这9款AI降重神器排名靠前,帮你快速完成内容优化处理
  • [AI智能体与提效-102] -AI智能体应用与传统的移动端应用的关系?是替代?还是在现有应用的基础之上被AI集成?
  • 详解无线路由器与无线AP的区别
  • NFS 环境搭建 (学习笔记)
  • 智能降重工具前九强榜单,助您高效提升文本原创度
  • 推荐9款智能降重工具,有效提升文本改写效率
  • 人工智能篇---百度技术生态
  • buuctf 逆向
  • 产线上,逐个产品数据高速数据记录方法
  • 上位机知识篇---Docker vs Node.js
  • Agent之skill:HuggingFaceSkills的简介、安装和使用方法、案例应用之详细攻略
  • 上位机知识篇---租用服务器
  • LLMs之RAG:PageIndex的简介、安装和使用方法、案例应用之详细攻略
  • 基于springboot框架的校园食堂点餐平台_98xr323n
  • 【认知雷达】The Case for Cognition and Radar Sensing 认知雷达传感的必要性
  • 基于springboot框架的校园二手交易系统的设计与开发_42194l18
  • 学Simulink——基于Simulink的PMSM无位置传感器(滑模观测器)控制仿真建模示例
  • 2026年2月文章一览
  • 1.2 从 BERT 到 ChatGPT:发展脉络与典型应用范式
  • 基于springboot框架的大学生在线摄影活动报名系统网站的设计与实现_p456017u
  • MySQL 慢日志分析工具---pt-query-digest