HDU4985
发布日期:2021-06-29 05:37:37 浏览次数:3 分类:技术文章

本文共 539 字,大约阅读时间需要 1 分钟。

题意:给定一个置换群,找出其中能构成循环的子群,分别输出。

解析:直接模拟即可。(此题感觉不太严谨,因为题目说是要字典序输出,但按照AC的程序来看每个循环的内部并没有保证是字典序,只是保证了循环之间的字典序。。。只是本人的一点理解)

代码:

#include 
#include
#define N 100005int a[N];bool vis[N];int main(){ int n; while(~scanf("%d", &n)){ for(int i = 1; i <= n; i++) scanf("%d", a+i); memset(vis, false, sizeof(vis)); for(int i = 1; i <= n; i++){ if(vis[i])continue; printf("(%d", i); vis[i] = true; int x = a[i]; while(!vis[x]){ vis[x] = true; printf(" %d", x); x = a[x]; } printf(")"); } puts(""); } return 0;}

转载地址:https://blog.csdn.net/zhj_fly/article/details/74295294 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:数据库索引
下一篇:次优最小生成树

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月23日 00时44分55秒