提交时间:2024-09-08 13:58:02
运行 ID: 32273
#include<bits/stdc++.h> using namespace std; long long T,n,m,a[1000005],p[1000005],vis[1000005],ans; long long mp[100][100],t[100]; long long flag; void check(long long x,long long y){ if(t[x]==1)return; if(x==y){ flag=1; return; } for(int i=1;i<=n;i++){ if(t[i]==0 && mp[x][i]==1 && x!=i){ check(i,y); } } } void sol(){ for(int i=0;i<50;i++)t[i]=0; for(int i=0;i<n;i++){ t[p[i]]=1; for(int j=1;j<=n;j++){ for(int z=j+1;z<=n;z++){ if(t[j]==1 || t[z]==1)continue; flag=0; check(j,z); if(flag)ans++; } } } } void dfs(long long deep){ if(deep==n){ sol(); return; } for(int i=1;i<=n;i++){ if(vis[i]==0){ vis[i]=1; p[deep+1]=i; dfs(deep+1); vis[i]=0; } } } int main(){ //freopen("blossom.in","r",stdin); //freopen("blossom.out","w",stdout); scanf("%lld",&T); while(T--){ scanf("%lld%lld",&n,&m); for(int i=1;i<=m;i++){ scanf("%lld",&a[i]); } for(int i=0;i<50;i++){ for(int j=0;j<50;j++){ mp[i][j]=0; } } for(int i=1;i<n;i++){ mp[i][i+1]=1; } for(int i=1;i<=m;i++){ for(int j=i+1;j<=m;j++){ mp[a[i]][a[j]]=1; } } ans=0; dfs(0); printf("%lld\n",ans); } return 0; }