题目
题意:给定n个点 ( x i , y i ) (x_i,y_i) (xi,yi),2j。如果不存在边 j − > i j->i j−>i,不妨设离j最近的点为k,此时有i,j颜色相同,而 d ( j , k ) < d ( i , j ) d(j,k)i j−>i,我们可以继续找其他的点k,使得其满足不存在边 k − > i k->i k−>i或不满足 k − > i k->i k−>i即可(因为根据情况1,我们总能找到的)。
对于第2种情况, s ( i ) s(i) s(i)可以选择相同颜色,也选择全部不同的颜色。这个根据条件1,很好理解。
有了以上两个结合,我们即可计算了。定义 d p [ i ] [ j ] dp[i][j] dp[i][j]表示取前i个点集,用j种颜色,可以组成的方案数。最终答案为 ∑ j = 1 n d p [ m ] [ j ] ∗ A ( n , j ) \sum_{j=1}^ndp[m][j]*A(n,j) ∑j=1ndp[m][j]∗A(n,j),其中m表示建图组成的孤立点+点集个数。
代码
#include
using namespace std;
const int N = 143;
const int K = 5;
const int MOD = 998244353;
int add(int x, int y)
{
x += y;
while(x >= MOD) x -= MOD;
while(x 0)
{
if(y % 2 == 1) z = mul(z, x);
x = mul(x, x);
y /= 2;
}
return z;
}
int fact[N];
int rfact[N];
int A(int n, int k)
{
return mul(fact[n], rfact[n - k]);
}
int n;
vector g[N];
int x[N];
int y[N];
int dist[N][N];
int color[N];
int dp[N][N];
int cc = 0;
set pts;
vector compsize;
void dfs1(int i)
{
//cerr
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?