从行和列两方面考虑问题。
1.从行,暴力遍历从第一行到最后一行,每两行的以元素,两两相加把每一个元素相加都小于k的两行都放到一个并查集,这里类似朋友的朋友也是朋友,如A与B符合条件,A与C符合条件,则A,B,C都在一个并查集,因为这里要利用通过变换能够得到多少不同种矩阵。只要在一个矩阵里就可以用排列组合的方式求有多少种分布方式。每一行中的不同并查集之间的分布种数通过相乘得到行通过变换可以得到多少种排列矩阵的方式。
2.从列,与行相同。
3.最后行的方式与列的方式相乘得到结果。
#include <stdio.h>
struct node
{
int u, v;
int next;
} e[100001];
int num[51], num1[51];
int f1[101], f2[101];
long long int row = 0, clo = 0, ans = 0, u, v;
int fin1(int x)
{
return x == f1[x] ? x : (f1[x] = fin1(f1[x]