博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LCS(HDU_5495 循环节)
阅读量:5171 次
发布时间:2019-06-13

本文共 1127 字,大约阅读时间需要 3 分钟。

LCS

题意:给出两个序列an和bn,想在给出一个序列pn,问经过a[p1],,,,a[pn]和b[p1],,,b[pn]变换后序列a和序列b的最长公共子序列的长度是多少。

思路:对a[i]->b[i]建边,最终总能形成一个环,对于这个长度为L的环,我们总能找到一个长度为L-1的LCS。所以,我们只要用序列的长度减去长度大于1的环的个数就是最终的结果。

例如:

   

代码:

#include 
using namespace std;const int maxn = 1e5+10;typedef long long ll;int a[maxn],b[maxn],c[maxn];int vis[maxn];inline void init(){ memset(vis,0,sizeof(vis)); return;}int main(){ int T; scanf("%d",&T); while(T--) { init(); int n; scanf("%d",&n); for(int i = 1; i<=n; i++) scanf("%d",&a[i]); for(int i = 1; i<=n; i++) { scanf("%d",&b[i]); c[a[i]] = b[i]; } int ans = n; for(int i = 1; i<=n; i++) { int t = i; if(c[t] != t && !vis[t]) { ans--; while(!vis[t]) { vis[t] = 1; t = c[t]; } } } printf("%d\n",ans); } return 0;}/*样例输入:231 2 33 2 161 5 3 2 6 43 6 2 4 5 1样例输出:24*/
View Code

 

转载于:https://www.cnblogs.com/sykline/p/9737690.html

你可能感兴趣的文章
http://blog.csdn.net/yunye114105/article/details/7997041
查看>>
设计模式这个东西 刚刚发现几种模式好像大同小异啊
查看>>
关于 主键和外键
查看>>
python集合的交,差,并,补集合运算汇总
查看>>
校园分期支付的机遇和风险
查看>>
怕忘记-windows 2003服务器安装Node.js NPM
查看>>
一鍵分享(優化后)
查看>>
dcm4che 的依赖无法下载
查看>>
cygwin主要命令
查看>>
多线程存在哪些风险
查看>>
洛谷P2692 覆盖 题解
查看>>
Linux下清理内存和Cache方法见下文:
查看>>
【AngularJs-模块篇-Form篇】
查看>>
支持向量基
查看>>
单链表 类
查看>>
类的组合 构造函数的用法
查看>>
ORACLE SQL:经典查询练手第三篇
查看>>
ubuntu 包管理
查看>>
java -io字符流FileWrite操作演示
查看>>
vue回到上一个位置
查看>>