ABC132E Hopscotch Addict 题解
看了一下题解,发现全是把一个点拆成三个点然后跑分层图最短路的,但是我一看感觉就是普通的 bfs。
题意是在图内询问从 到 是否存在长度为 的路径。不妨开一个数组, 表示是否存在从点 出发,是否存在长度模 是 的路线。那么每次更新就是 ,这样复杂度是 的。
很短而且很快的 code:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cassert> #include<queue> #define siz(x) (int)(x).size() using std::cin;using std::cout; constexpr int kN=1e5+1; std::basic_string<int>g[kN]; using pii=std::pair<int,int>; bool vis[kN][3]; int n,m,s,t; signed main(){ // freopen("checkers.in","r",stdin); // freopen("checkers.out","w",stdout); std::ios::sync_with_stdio(false);cin.tie(nullptr); cin>>n>>m; for(int i=1,u,v;i<=m;i++)cin>>u>>v,g[u]+=v; cin>>s>>t;vis[s][0]=true; std::queue<pii>q({{s,0}}); while(!q.empty()){ auto[u,x]=q.front();x++;q.pop(); for(int v:g[u])if(!vis[v][x%3]){ if(v==t&&x%3==0)return cout<<x/3,0; vis[v][x%3]=true; q.emplace(v,x); } } cout<<"-1"; // std::cerr<<"\033[33;40muse "<<clock()<<" ms\033[37;40m"; return 0; }
哎呀用 basic_string
存图,多是一件美事啊!哎呀,啧啧啧啧,不快不慢(指比 vector
快但是略慢于链式前向星),效果真是好极了。这位巨佬,看看,没事吧,用吧,赶快用吧。巨佬,你得带个头,你要不带头用。他,他们怎么能,能敢用呢?诶,都,都 都看我干什么呀?用呀 用呀 用,快,快,赶快用,嘿,赶快用呀!(突然变脸)哎!!!TNND,为什么不用?用!用!不 不用…不用是吧,不用,不用我就啊了你!都不敢用,都怕超时是吧。我告诉你,不用?不用也别想减小码量( basic_string
语法糖,插入可以使用 +=
运算符)!既然大家都知道了,这戏我也就不演了……(后省略好多字)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架