洛谷 T89643 回文串(并查集)

洛谷:https://www.luogu.org/problem/T89643
 题目描述
 由于 Kiana 实在是太忙了,所以今天的题里面没有 Kiana。 有一个长度为 N 的字符串 S,有 K 条信息,每条信息为一个区间 [l,r],表示 S[l],S[l+1],……,S[r]是一个回文串。 出题人想知道,这个字符串中最多有多少种不同的字符。由于她 不会算,所以希望由你告诉她。
 输入格式
输入文件包括 K+1 行。 第一行包含两个正整数 N 和 K,分别表示字符串的长度和给定信 息的数量。 接下来 K 行,每行包含两个正整数 l 和 r,表示 S[l],S[l+1],……,S[r] 是一个回文串。
输出格式
输出文件包括一行。 第一行包含一个正整数,表示给出的字符串中最多有多少种不同 的字符。
分析:

8 4

1 5

3 4

7 8

2 6
因为1,5之间的字符串是回文的,所以1,5;2,4;对应字符相同;

同理 3 4字符相同,所以 2 3 4 字符相同,7 8 字符相同;

2,6: 2,6字符相同,所以2 3 4 6相同 ;3 5 相同,进一步得1 2 3 4 5 6相同
这些一步一步合并的过程是不是很像并查集?bingo!这道题就用并查集做,以下是AC


#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
int n, k;
int f[maxn], root[maxn];
int sum;
int getc(int k) {//寻找父亲并更新路径上所有节点(路径压缩)
if (k == f[k])return k;
else return f[k] = getc(f[k]);
}
void un(int x, int y) {//带秩合并,更快一些,有的题会对秩进行操作
x = getc(x), y = getc(y);
if (root[x] > root[y])
f[y] = x;
else {
f[x] = y;
if (root[x] == root[y])
root[y]++;
}
}
int main() {
freopen("shuru.txt", "r", stdin);
ios::sync_with_stdio(false);
cin >> n >> k;
if (n < ) {
if (n == )cout << << endl;
else cout << << endl;
return ;
}
for (int i = ; i <= n; i++)f[i] = i;
int l, r;
for (int i = ; i <= k; i++) {
cin >> l >> r;
for (int j = l, q = r; j < q; j++, q--) {//回文串从两端向中间,每对字符都是相同的,相同的字符加入一个并查集
un(j, q);
}
}
for (int i = ; i <= n; i++) {
if (getc(i) == i)sum++;//有多少个字符是不同的,因为要求最大所以每个都+1
////可能有的点只是挂上了还没更新1->5->9   11->12 f[9]=12,但此时f[1]还未更新为12,所以要再求一次find
}
cout << sum << endl;
}

洛谷T89644 palindrome回文串的更多相关文章

  1. 【洛谷P3649】回文串

    题目大意:给定一个长度为 N 的字符串,定义一个变量为该字符串的回文子串长度乘以该字串出现的次数,求这个变量的最大值是多少. 题解:学会了回文自动机. 回文自动机是两棵树组成的森林结构,并通过 fai ...

  2. 洛谷P3649 [APIO2014]回文串(回文自动机)

    传送门 话说回文自动机我自己都还没搞懂呢…… 等到时候会了再来填坑 //minamoto #include<cstdio> #include<cstring> #define ...

  3. 题解 洛谷 P2010 【回文日期】

    By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...

  4. hdu 1159 Palindrome(回文串) 动态规划

    题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串) 分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解 状态转化方程: ...

  5. 洛谷——P1609 最小回文数

    题目描述 回文数是从左向右读和从右向左读结果一样的数字串. 例如:121.44 和3是回文数,175和36不是. 对于一个给定的N,请你寻找一个回文数P,满足P>N. 满足这样条件的回文数很多, ...

  6. 洛谷—— P1609 最小回文数

    https://www.luogu.org/problemnew/show/1609 题目描述 回文数是从左向右读和从右向左读结果一样的数字串. 例如:121.44 和3是回文数,175和36不是. ...

  7. 洛谷 P1609 最小回文数 题解

    这题其实并不难,重点在你对回文数的了解,根本就不需要高精度. 打个比方: 对于一个形如 ABCDEFGH 的整数 有且仅有一个比它大的最小回文数 有且仅有一个比它小的最大回文数 而整数 ABCDDCB ...

  8. 洛谷 U3346 A1-偶回文数

    U3346 A1-偶回文数 题目背景 方方方很喜欢回文数,于是zzq就出了一道关于回文数的题目. 因为偶回文数比较简单,所以方方方就把它放在了第一题... 题目描述 我们定义一个长度为偶数的回文数叫做 ...

  9. 【洛谷p1217】回文质数

    回文质数[题目链接] 始终要记得凌云壮flag(真香) 说是个搜索,其实感觉更像是一个暴力: 这个题的难度并不是特别大,因为下面的提示太明显了qwq,(而且之前培训也讲过)首先是构造回文数,构造回文数 ...

随机推荐

  1. nginx 499错误

    原因: 服务响应时间太长,客户端自动断开链接. 解决: 1. 找到响应世间长的接口,看依赖的数据源(数据库,第三方接口等)响应时间是否超时,还是自己程序有逻辑问题. 可以通过加入日志打印时间消耗来确定 ...

  2. 第二次java面试(用友山东济南分公司)

    坐标:山东潍坊公共实训基地 面试单位:用友济南分公司(来了一位HR和技术经理) 本人状态:距离离校15天 宣讲: 1.女HR和男技术经理来到我们专业提前准备好的教室,先宣传海报和发传单,然后看了4个3 ...

  3. HDU 6538 Neko and quadrilateral(极角排序+旋转坐标系)

    这道题简直太好了,对于计算几何选手需要掌握的一个方法. 首先对于求解四边形面积,我们可以将四边形按对角线划分成两个三角形,显然此时四边形的面积最大最小值就变成了求解里这个对角线最近最远的点对. 对于此 ...

  4. 2101 可达性统计(拓扑排序/dfs+状态压缩)

    [题目描述] 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量.N,M≤30000. [题目链接] 2101 可达性统计 [算法] 拓扑排序之后逆序计算(感觉dfs更好写而且应 ...

  5. VUE组件嵌套

    vue中组件嵌套烦分为两种,分别是全局注册组件和局部注册组件 基本步骤: 1.在components 下创建一个新的.vue结尾的文件,文件首字母最好是大写,基于规范复制代码 2.分别写出结构层< ...

  6. Webpack Loader种类以及执行顺序

    我们在用webpack构建项目的时候,有两种配置打包文件的方式: import或者require :a-loader!b-loader!.././static/dog.png(打包某一个文件) 配置w ...

  7. javaweb各种框架组合案例(九):springboot+tk.mybatis+通用service

    一.项目结构 二.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  8. 06Web服务

    1.web开发入门 1.1 引入 软件结构分类: CS结构:客户端和服务器端 特点: 1)必须安装特点的客户端程序 2)服务器端升级,客户端同步升级 BS结构:浏览器和服务器端 特点: 1)不需要安装 ...

  9. join 按两个文件的相同字段合并

    1.命令功能 join对每一对具相同内容的输入行,合并为一行输出.默认情况是把输入的第一个字段作为连接字段,字段间用空格隔开. 2.语法格式 join  option  file1  file2 jo ...

  10. [HEOI2015]兔子与樱花(贪心)

    [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由\(n\)个树枝分叉点组成,编号从\ ...