[JZOJ5029]围墙
来源:互联网 发布:电商美工是干什么的 编辑:程序博客网 时间:2024/04/28 03:59
题目大意
给定一个长度为
输出任意一种方案即可,数据保证有解。
题目分析
显然我们先将所有
考虑怎么优化,可以发现大小为
代码实现
#include <algorithm>#include <iostream>#include <cstdio>using namespace std;const int N=105;int P[N],fa[N],rank[N];bool seq[N],cet[N];int n;int getfather(int son){return fa[son]==son?son:fa[son]=getfather(fa[son]);}inline int merge(int x,int y){ if (rank[x]>rank[y]) swap(x,y); fa[x]=y,rank[y]+=rank[x]==rank[y];}inline void go(int x){for (int y=P[x],c=seq[x];x!=y;c=seq[y]=c^1,cet[y]^=1,y=P[y]);}bool dfs(int x,int sum){ if (sum<0) return 0; if (x==n+1) return !sum; if (!cet[x]) { /*if (seq[x]=0,go(x),dfs(x+1,sum+(seq[x]?-1:1))) return 1; go(x); if (P[P[x]]==x) return 0; if (seq[x]=1,go(x),dfs(x+1,sum+(seq[x]?-1:1))) return 1; return go(x),0;*/ for (int c=0,y,z,cnt;c<2;++c) { for (cnt=1,z=seq[x]=c,y=P[x];x!=y;z=seq[y]=z^1,cet[y]=1,y=P[y],++cnt); if (dfs(x+1,sum+(seq[x]?-1:1))) return 1; if (cnt==2) return 0; } for (int y=P[x];x!=y;y=P[y],cet[y]=0); return 0; }else return dfs(x+1,sum+(seq[x]?-1:1));}int main(){ freopen("wall.in","r",stdin),freopen("wall.out","w",stdout); scanf("%d",&n); for (int i=1;i<=n;++i) fa[i]=i; for (int i=1;i<=n;++i) { scanf("%d",&P[i]); int fx=getfather(i),fy=getfather(P[i]); if (fx!=fy) merge(fx,fy); } dfs(1,0); for (int i=1;i<=n;++i) putchar(seq[i]?')':'('); printf("\n"); fclose(stdin),fclose(stdout); return 0;}
0 0
- [JZOJ5029]围墙
- 围墙
- 围墙
- 爱心围墙
- 无形的牧场围墙
- 围墙上的猫
- 围墙 - Qzone日志
- POJ1113翻译 围墙
- usaco围墙涂色
- 围墙外的世界
- 圆形围墙任意角度固定图案创意
- vfork和clone--红灯和围墙
- 红灯和围墙--立交桥(续)
- POJ 1113 Wall 围墙 凸包
- 互联网+的首要任务是拆围墙
- 葛冬冬:走出围墙的运筹学拓荒者
- 搜狗14年,搜狗王小川想拆掉围墙
- 管理故事216之009-无形的牧场围墙
- 外网如何访问本地tomcat web服务器
- Fighting_小银考呀考不过四级
- ubuntu安装Python虚拟环境
- unity 关于添加自动导航NavMeshAgent后模型动画的抖动问题
- IP地址输入控件(仿照windows的ip输入做的)
- [JZOJ5029]围墙
- opencv histogram
- zookeeper Java客户端API的使用方法
- [11]javascript Function 类型
- 解决Unable to add a source with url
- 设计模式(19)-中介者模式
- 数据存储与访问之——初见SQLite数据库
- BZOJ2466: [中山市选2009]树
- attr与prop的区别