2 条题解
-
0
那个神人想出来的玄学复杂度啊?
#include<bits/stdc++.h> using namespace std; const int N=210; int c[N],a[N][N],cnt,nxt[N],v[N],siz[N],n; void dfs1(int x) { if(v[x])return ;v[x]=1; a[cnt][++siz[cnt]]=x; dfs1(nxt[x]); } void check() { int sum=0; for(int i=1;i<=n;i++) { sum+=(c[i]?1:-1); if(sum<0)return ; } for(int i=1;i<=n;i++)cout<<(c[i]?'(':')'); exit(0); } void dfs2(int x) { if(x==cnt+1) { check(); return; } if(siz[x]==2) { int l=a[x][1],r=a[x][2];if(l>r)swap(l,r); c[l]=1,c[r]=0; dfs2(x+1); return; } for(int i=1;i<=siz[x];i++)c[a[x][i]]=(i&1); dfs2(x+1); for(int i=1;i<=siz[x];i++)c[a[x][i]]^=1; dfs2(x+1); } signed main() { cin>>n; for(int i=1;i<=n;i++)cin>>nxt[i]; for(int i=1;i<=n;i++)if(!v[i])cnt++,dfs1(i); dfs2(1); return 0; } -
0

#include <cstdio> #define rep(i,_l,_r) for(register signed i=(_l),_end=(_r);i<=_end;++i) #define fep(i,_l,_r) for(register signed i=(_l),_end=(_r);i>=_end;--i) #define print(x,y) write(x),putchar(y) template <class T> inline T read(const T sample) { T x=0; int f=1; char s; while((s=getchar())>'9'||s<'0') if(s=='-') f=-1; while(s>='0'&&s<='9') x=(x<<1)+(x<<3)+(s^48),s=getchar(); return x*f; } template <class T> inline void write(const T x) { if(x<0) return (void) (putchar('-'),write(-x)); if(x>9) write(x/10); putchar(x%10^48); } #include <vector> #include <cstdlib> using namespace std; const int maxn=105; vector <int> g[maxn]; int n,p[maxn],cnt,siz[maxn]; bool vis[maxn],co[maxn]; void FindCircle(int u,int id) { if(vis[u]) return; g[id].push_back(u); vis[u]=1; ++siz[id]; FindCircle(p[u],id); } void ok() { int tot=0; rep(i,1,n) { tot+=(co[i]?-1:1); if(tot<0) return; } rep(i,1,n) putchar(co[i]?')':'('); puts(""); exit(0); } void dfs(int x) { if(x>cnt) return ok(); if(siz[x]==2) { co[g[x][0]]=0,co[g[x][1]]=1; dfs(x+1); return; } rep(i,0,g[x].size()-1) co[g[x][i]]=(i&1); dfs(x+1); rep(i,0,g[x].size()-1) co[g[x][i]]=(!(i&1)); dfs(x+1); } int main() { n=read(9); rep(i,1,n) p[i]=read(9); rep(i,1,n) if(!vis[i]) FindCircle(i,++cnt); dfs(1); return 0; }
- 1
信息
- ID
- 10101
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 9
- 标签
- 递交数
- 12
- 已通过
- 4
- 上传者