P4321随机man游题解
题意概要
给你一个无向图,求随机游走将
题解
首先图上随机游走肯定是要高消的,但只想到这一点对思路提醒不大。
注意到点数
易得转移(其中
注意到这么搞枚举状态有
于是注意到
代码
还有细节不懂可以看注释。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
int n,m,q,all/*全集*/,tot,in[30]/*入度*/,head[30],dp[1110101][30],a[30][30];
int dfn[30],p[30];//dfs序
struct jiegoutiming{//链式前向星
int nxt,to;
}e[888];
void add(int u,int v){
in[v]++;
e[++tot].to=v;
e[tot].nxt=head[u];
head[u]=tot;
return;
}
int qpow(int x,int y){//快速幂
int aaa=1;
while(y){
if(y&1){
aaa=aaa*x%mod;
}
x=x*x%mod;
y>>=1;
}
return aaa;
}
void gaosi(int n,int S){
for(int i=1;i<=n;i++){//高消板子
int u=i;
for(int j=i+1;j<=n;j++){
u=a[j][i]>a[u][i]?j:u;
}
for(int j=1;j<=n+1;j++){
swap(a[i][j],a[u][j]);
}
for(int j=1;j<=n;j++){
if(i^j){
int t=a[j][i]*qpow(a[i][i],mod-2)%mod;
for(int k=i+1;k<=n+1;k++){
a[j][k]=((a[j][k]+mod-t*a[i][k]%mod)%mod+mod)%mod;
}
}
}
}
for(int i=1;i<=n;i++){//更新答案
dp[S][p[i]]=a[i][n+1]*qpow(a[i][i],mod-2)%mod;
}
}
void dfs(int nn,int S,int dep,int lst){
if(dep>nn){
for(int i=1;i<=nn;i++){
for(int j=1;j<=nn+1;j++){
a[i][j]=0;
}
}
int tot=0;
for(int i=1;i<=n;i++){
if(S&(1<<(i-1))){
dfn[i]=++tot;
p[tot]=i;
}
}
for(int i=1;i<=nn;i++){//处理方程
a[i][i]=a[i][nn+1]=mod-1;
int ni=qpow(in[p[i]],mod-2);
for(int j=head[p[i]];j;j=e[j].nxt){
int v=e[j].to;
if(S&(1<<(v-1))){
a[i][dfn[v]]=ni;
}
else{
a[i][nn+1]=((a[i][nn+1]+mod-dp[S|(1<<(v-1))][v]*ni%mod)%mod+mod)%mod;
}
}
}
return gaosi(nn,S);
}
for(int i=lst+1;i<=n;i++){
dfs(nn,S^(1<<(i-1)),dep+1,i);
}
}
signed main(){
cin>>n>>m;
all=(1<<n)-1;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
cin>>q;
for(int i=n-1;i>0;i--){
dfs(i,0,1,0);
}
while(q--){
int x,S=0,y,z;
cin>>x;
for(int i=1;i<=x;i++){
cin>>y;
S|=(1<<(y-1));
}
cin>>z;
cout<<dp[(all^S)|(1<<(z-1))][z]<<endl;//如果起点是终点之一要直接排除,否则不合法
}
return 0;
}
本文作者:LEWISAK
本文链接:https://www.cnblogs.com/lewisak/p/18746933
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步