不会写,看的题解,emm,很厉害讷

为了方便解释,假设现在只需要考虑两个集合红,蓝(a,b)

那 么 同 集 合 间 的 点 肯 定 不 能 连 边 , 否 则 距 离 是 1 了 那么同集合间的点肯定不能连边,否则距离是1了 ,1

同 色 的 点 不 能 同 时 连 到 一 个 不 同 色 的 点 去 , 否 则 距 离 是 2 了 同色的点不能同时连到一个不同色的点去,否则距离是2了 ,2

综 上 所 诉 , 连 边 的 话 最 后 的 连 通 块 要 么 是 单 独 的 一 种 颜 色 \color{Red}综上所诉,连边的话最后的连通块要么是单独的一种颜色 ,

要 么 是 1 个 红 点 和 1 个 蓝 点 组 成 的 连 通 块 要么是1个红点和1个蓝点组成的连通块 11

那 么 红 点 和 蓝 点 组 成 的 连 通 块 最 多 有 m i n n = m i n ( a , b ) 个 那么红点和蓝点组成的连通块最多有minn=min(a,b)个 minn=min(a,b)

所 以 对 于 i ∈ [ 0 , m i n n ] , 都 是 从 红 色 中 选 i 个 点 C a i 所以对于i\in[0,minn],都是从红色中选i个点C_{a}^{i} i[0,minn],iCai

再 从 蓝 点 中 选 i 个 点 C b i , 然 后 i 对 红 蓝 点 间 连 边 有 ! i 种 可 能 再从蓝点中选i个点C_{b}^{i},然后i对红蓝点间连边有!i种可能 iCbi,i!i

好了,现在我们解决的两个集合a,b间连边,但是多加一个集合c进来呢?

答 案 就 是 a b 间 连 边 可 能 ∗ b c 连 边 可 能 ∗ a c 连 边 可 能 答案就是ab间连边可能*bc连边可能*ac连边可能 abbcac

按 照 我 们 上 面 的 考 虑 , 同 色 点 间 的 距 离 不 会 小 于 3 按照我们上面的考虑,同色点间的距离不会小于3 ,3

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=5009;
const ll mod =998244353;
ll a,b,c,C[maxn][maxn],ans=1,fac[maxn];
void init()
{
	C[0][0]=1,fac[0]=1;
	for(int i=1;i<=5000;i++)
	{
		C[i][0]=1,fac[i]=fac[i-1]*(ll)i%mod;
		for(int j=1;j<=i;j++)	C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
	}
}
void run(ll a,ll b)
{
	ll minn=min(a,b),temp=0;
	for(int i=0;i<=minn;i++)
		temp=(temp+C[a][i]*C[b][i]%mod*fac[i]%mod)%mod;
	ans=ans*temp%mod;
}
int main()
{
	cin >> a >> b >> c;
	init();//求解组合数 
	run(a,b);run(b,c);run(a,c);
	cout<<ans;
}