AT_arc151_b A < AP
Tag: 并查集,数学
题目描述
给定一个
- 对于
的每一个 , 。 数组字典序小于 数组。
制約
- 入力はすべて整数
思路
我们令序列
当前有
用快速幂就可以求出方案数。由于
#include<bits/stdc++.h>
#define int long long
#pragma GCC optmize(3)
using namespace std;
const int mod=998244353;
int n,m,ans;
int cnt;
int p[200005],fa[200005];
int find(int x)
{
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int pow(int a,int b,int p)
{
int cnt=1;
while(b)
{
if(b&1) cnt=cnt*a%p;
a=a*a%p;
b>>=1;
}
return cnt%p;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>p[i];
fa[i]=i;
}
cnt=n;
for(int i=1;i<=n;i++)
{
int x=find(i),y=find(p[i]);
if(x!=y)
{
ans=(ans+(pow(m,cnt-2,mod)*(m*(m-1)/2%mod))%mod)%mod;
cnt--;
fa[x]=y;
}
}
cout<<ans<<"\n";
return 0;
}
本文作者:yaaaaaan
本文链接:https://www.cnblogs.com/yaaaaaan/p/18619516
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步