题目链接:
思路:合并的过程中多了一个条件,而这个条件的判断可以通过求最长公共连续子序列得到,别的和普通的并查集没什么区别,最后就是简单地判断一下集合的个数即可。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 111 7 char str[MAXN][MAXN]; 8 int len[MAXN]; 9 int dp[MAXN][MAXN];10 int parent[MAXN];11 int n;12 double p;13 14 void Initiate()15 {16 for(int i=0;i maxlen)maxlen=dp[i][j];39 }40 }41 }42 return maxlen;43 }44 45 46 int main()47 {48 int ans,t=1;49 while(~scanf("%d%lf",&n,&p))50 {51 for(int i=0;i p&&pp/len[j]>p)parent[r1]=r2;64 }65 }66 ans=0;67 for(int i=0;i