神秘!在这些排列生成的置换群 \(G\) 里,若 \(\exists \pi \in G\) 使得 \(\pi_i=k,\pi_j=l\),则所有这些 \((k,l)\) 被同样数量的 \(\pi\in G\) 通过前述方法得出。

证明:设 \(\pi(i,j)=(k,l),\pi'(i,j)=(k',l')\)(意义前述),则 \(\pi^{-1}\circ \pi'(k,l)=(k',l')\),这表明 \((k',l')\) 的方案数不少于 \((k,l)\),因为每个 \((k,l)\) 方案可以复合 \(\pi^{-1}\circ \pi'\) 得到 \((k',l')\) 方案。对于所有二元组对这都成立,因此所有方案数相等。

因此我只需统计连通信息,尝试选择更少的能产生同样连通性的排列。考察一个连通块内部,就是需要 \(S_n\) 的更少联通排列。考虑随机在 \(S_n\) 里选排列,其生成的循环如果不是大小全部相同(可能性极小),那么跨循环之间的点对已经连通;而循环最大大小很有可能是 \(n\) 的\(0.6\sim 0.7\) 倍。因此我大概只需要 \(\log\) 次选择可以连通所有点(在说啥,,)。

因此我只需随机大约 \(\log\) 次,每次做多次随机决定是否复合某个给定排列即可。把这些拿出来求连通块即可。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=3e3+5,lim=24,mod=1e9+7;
int ans=0,n,k,b[maxn],vis[maxn*maxn];
struct perm{int p[maxn];}S[maxn];
inline perm operator ^(const perm &A,const perm &B){
perm C;
for(int i=1;i<=n;i++)C.p[i]=A.p[B.p[i]];
return C;
}
mt19937 rng(time(0));
int Fa[maxn*maxn],A[maxn*maxn],B[maxn*maxn],inv[maxn*maxn*2];
int id(int i,int j){return (i-1)*n+j;}
int Find(int x){return x==Fa[x]?x:Fa[x]=Find(Fa[x]);}
int qp(int a,int b){
if(b==0)return 1;
int T=qp(a,b>>1);T=T*T%mod;
if(b&1)T=T*a%mod;
return T;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=k;i++)for(int j=1;j<=n;j++)cin>>S[i].p[j];
for(int i=1;i<=n*n;i++)Fa[i]=i;
for(int i=1;i<=lim;i++){
perm I;for(int j=1;j<=n;j++)I.p[j]=j;
for(int j=1;j<=k;j++)if(rng()&1)I=I^S[j];
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)Fa[Find(id(i,j))]=Find(id(I.p[i],I.p[j]));
}
for(int i=1;i<=n*n*2;i++)inv[i]=qp(i,mod-2);
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)A[Find(id(i,j))]+=i<j,B[Find(id(i,j))]+=i>j;
for(int i=1;i<=n*n;i++)if(Find(i)==i)(ans+=(A[i]*B[i])%mod*inv[A[i]+B[i]])%=mod;
cout<<ans<<endl;
return 0;
}

P10353 [PA2024] Grupa permutacji 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. Python之解析配置文件

    [.env] 1) 使用python-dotenv 安装: pip install python-dotenv 示例配置文件: ADMIN_HOST = https://uat-rm-gwaaa.cn ...

  2. ubuntu 下的 nslookup 命令利用 127.0.0.53 查询主机名失败,而使用网关则正常的问题

    遇到一个奇怪的问题,ubuntu 下使用 KRDC 远程访问局域网主机时,连接主机名失败,使用 ip 则正常.通过 nslookup 命令发现,局域网主机名没有被正确解析(使用的是默认的 127.0. ...

  3. 2024御网杯信息安全大赛个人赛wp_2024-11-27

    MISC题解 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 --来 ...

  4. 使用 wireshark 捕获 请求包

    1.出错场景 今天遇到一个问题,在用户登录时,发现用户在登录的时候,一个用户登录正常,一个用户登录报错,报错的原因时400错误,分析对比发现一个用户的分配用户组多,一个分配的少,其中多的那个出错了. ...

  5. 2.mysql授权认证

    权限系统介绍 ● 什么是权限系统 权限系统是授予来自某个主机的某个用户可以查询.插入.修改.删除等数据库操作的权限 不能明确的指定拒接某个用户的连接 权限控制(授权与收回)的执行语句包括 create ...

  6. 【C#】【平时作业】习题-4-流程控制

    T1 创建一个Windows应用程序,先输入年龄值,再判断是否大于18,最后显示判断结果,运行效果如图所示. 提示: 注意保持逻辑完整: 引用数据需要明确出处. [程序代码] private void ...

  7. kubectl get deploy

    for i in `kubectl get deployments.apps -n nvpc-apps-02|grep -v NAME|awk '{print $1}'`; do kubectl ge ...

  8. re模块:核心函数和方法

    1.compile(pattren,flages=0)   使用任何可选的标记来编译正则表达式的模式然后返回一个正则表达式对象 2.match(pattern,string,flags=0)    尝 ...

  9. 波折重重:Linux实时系统Xenomai宕机问题的深度定位

    目录 一 前言 二 背景 三 原因分析及措施 硬件原因 应用软件 操作系统 四 分析定位 转机 拨云见雾 irq计数 Schedstat coreclk 现象结论 五 原因一 六 原因二 七 解决 八 ...

  10. Qt可视化大屏电子看板系统全平台效果图