THUPC2021 网络赛题解

#include<bits/stdc++.h>
#define N 13
#define M 4100
#define db double
#define ll long long
#define ldb long double
#define ull unsigned long long
using namespace std;
const int h=3,ki=149,mo=998244353;
inline int mod(int x){return (x%mo+mo)%mo;}
inline int inc(int x,int k){x+=k;return x<mo?x:x-mo;}
inline int dec(int x,int k){x-=k;return x>=0?x:x+mo;}
int read()
{
	char ch=0;int x=0,flag=1;
	while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0',ch=getchar();}
	return x*flag;
}
void write(int x)
{
	if(!x)return (void)putchar(48);
	if(x<0)putchar(45),x=-x;
	int len=0,p[20];
	while(x)p[++len]=x%10,x/=10;
	for(int i=len;i>=1;i--)putchar(p[i]+48);
}
int len[M],mp[M][M];
int S[N][N],f[M][N],g[M][N],a[M][M],b[M][M],dp[N][M][M];
int main()
{
	int n=read(),k=read();
	
	/*
	for(int i=1;i<=n*(n-1);i++)
	{
		int x=read(),y=read(),p=read(),q=read();
		S[x][y]=1ll*p*inv(q)%mo;
	}
	*/
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	if(i!=j)S[i][j]=rand();
	
	
	for(int s=1;s<(1<<n);s++)
	for(int x=1;x<=n;x++)	
	if(!((1<<(x-1))&s))
	{
		int tmp=1;
		for(int i=1;i<=n;i++)
		{
			if(i==x)continue;
			if((1<<(i-1))&s)tmp=1ll*tmp*dec(1,S[i][x])%mo;
		}
		f[s][x]=dec(1,tmp);g[s][x]=tmp;
	}
	
	//a[s][t]表示s向t连
	//b[s][t]表示s向t全部不连
	for(int s=1;s<(1<<n);s++)
	{
		int k=((1<<n)-1)-s;
		for(int t=k;t;t=(t-1)&k)
		if((s&t)==0)
		{
			a[s][t]=b[s][t]=1;
			for(int i=1;i<=n;i++)if((1<<(i-1))&(t))
			{
				a[s][t]=1ll*a[s][t]*f[s][i]%mo;
				b[s][t]=1ll*b[s][t]*g[s][i]%mo;
			}
		}
	}
	
	
	for(int t=1;t<(1<<n);t++)a[0][t]=b[0][t]=1;
	
	int v=(1<<n)-1,ans=0; 
	dp[0][1][1]=1;
	
	
	for(int s=0;s<(1<<n);s++)for(int t=s;t;t=(t-1)&s)mp[s][++len[s]]=t;
	
	
	for(int i=0;i<k;i++)
	{
		for(int s=0;s<(1<<n);s++)
		for(int j=1;j<=len[s];j++)
		for(int t=1;t<=len[v^s];t++)
		{
			int &go=dp[i+1][s|mp[v^s][t]][mp[v^s][t]];
			go+=1ll*dp[i][s][mp[s][j]]*a[mp[s][j]][mp[v^s][t]]%mo*b[s^mp[s][j]][mp[v^s][t]]%mo; 
			if(go>=mo)go-=mo;
		} 
		for(int s=0;s<(1<<n);s++)ans=inc(ans,dp[i+1][v][s]);
	}
	write(ans);
	return 0;
}
posted @ 2020-12-18 19:36  Creed-qwq  阅读(338)  评论(0编辑  收藏  举报