图论杂题
Sort with Swap(0,*) (25)
Link
这道题要求一定是和0交换。
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <string> #include <string.h> #include <vector> #include <cmath> using namespace std; int n,cnt; int a[100000]; bool vis[100000]; int main() { scanf("%d",&n); for(int i=0;i<n;++i) scanf("%d",&a[i]); for(int i=0;i<n;++i) if(!vis[i]){ vis[i]=true; int cur=a[i],tmp=1; while(cur!=i){ vis[cur]=true; cur=a[cur]; tmp++; } if(tmp==1) continue; if(i==0) cnt+=tmp-1; else cnt+=tmp+1; } printf("%d\n",cnt); return 0; }
如果不是和0交换,而是任意两数交换都可以,那么只用改以下部分即可:
for(int i=0;i<n;++i) if(!vis[i]){ vis[i]=true; int cur=a[i],tmp=1; while(cur!=i){ vis[cur]=true; cur=a[cur]; tmp++; } cnt+=tmp-1; }
本文作者:Ryomk
本文链接:https://www.cnblogs.com/preccrep/p/16400356.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步