acwing上能过,这里Wa了第4个点,代码如下
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ri int
using namespace std;
typedef long long ll;
const int N=15,M=8200;
ll T,n,m,s,x,y,ans,sum,w[N],a[N][N],f[M][N][N],g[M][N][N];
void solve()
{
memset(f,-1,sizeof(f)); memset(a,0,sizeof(a)); memset(g,0,sizeof(g));
ans=sum=s=0;
scanf("%lld %lld",&n,&m);
for(ri i=0;i<=n-1;i++) scanf("%lld",&w[i]),s+=w[i];
for(ri i=1;i<=m;i++)
{
scanf("%lld %lld",&x,&y); x--,y--;
a[x][y]=a[y][x]=1;
}
for(ri i=0;i<=n-1;i++) f[1<<i][i][i]=0,g[1<<i][i][i]=1;
for(ri i=0;i<=(1<<n)-1;i++)
for(ri j=0;j<=n-1;j++)
for(ri k=0;k<=n-1;k++) if(((i>>j)&1)&&((i>>k)&1)&&f[i][j][k]!=-1)
for(ri p=0;p<=n-1;p++) if((!((i>>p)&1))&&a[k][p])
{
ll res=f[i][j][k]+w[k]*w[p];
if(a[j][p]&&a[j][k]) res+=w[j]*w[k]*w[p];
if(res>f[i|(1<<p)][k][p]) f[i|(1<<p)][k][p]=res,g[i|(1<<p)][k][p]=g[i][j][k];
else if(res==f[i|(1<<p)][k][p]) g[i|(1<<p)][k][p]+=g[i][j][k];
}
for(ri i=0;i<=n-1;i++)
for(ri j=0;j<=n-1;j++)
if(f[(1<<n)-1][i][j]>ans)
ans=f[(1<<n)-1][i][j];
for(ri i=0;i<=n-1;i++)
for(ri j=0;j<=n-1;j++)
if(f[(1<<n)-1][i][j]==ans)
sum+=g[(1<<n)-1][i][j];
if(ans&&sum) printf("%lld %lld\n",ans+s,sum/2);
else printf("0 0\n");
}
int main()
{
scanf("%lld",&T);
while(T--) solve();
return 0;
}