HDU4985

来源:互联网 发布:2016淘宝客如何推广 编辑:程序博客网 时间:2024/06/13 07:14

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

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

代码:

#include <stdio.h>#include <string.h>#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;}


原创粉丝点击