LCS

 Accepts: 127
 Submissions: 397
 Time Limit: 6000/3000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
你有两个序列\{a_1,a_2,...,a_n\}{a​1​​,a​2​​,...,a​n​​}和\{b_1,b_2,...,b_n\}{b​1​​,b​2​​,...,b​n​​}. 他们都是11到nn的一个排列. 你需要找到另一个排列\{p_1,p_2,...,p_n\}{p​1​​,p​2​​,...,p​n​​}, 使得序列\{a_{p_1},a_{p_2},...,a_{p_n}\}{a​p​1​​​​,a​p​2​​​​,...,a​p​n​​​​}和\{b_{p_1},b_{p_2},...,b_{p_n}\}{b​p​1​​​​,b​p​2​​​​,...,b​p​n​​​​}的最长公共子序列的长度最大.
输入描述
输入有多组数据, 第一行有一个整数TT表示测试数据的组数. 对于每组数据:

第一行包含一个整数n (1 \le n \le 10^5)n(1≤n≤10​5​​), 表示排列的长度. 第2行包含nn个整数a_1,a_2,...,a_na​1​​,a​2​​,...,a​n​​. 第3行包含nn个整数 b_1,b_2,...,b_nb​1​​,b​2​​,...,b​n​​.

数据中所有nn的和不超过2 \times 10^62×10​6​​.
输出描述
对于每组数据, 输出LCS的长度.
输入样例
2
3
1 2 3
3 2 1
6
1 5 3 2 6 4
3 6 2 4 5 1
输出样例
2
4

题目中给出的是两个排列, 于是我们可以先把排列分成若干个环, 显然环与环之间是独立的. 事实上对于一个长度为l
(l > 1)l(l>1)的环,
我们总可以得到一个长度为l-1l−1的LCS,
于是这个题的答案就很明显了, 就是nn减去长度大于11的环的数目.

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; const int maxn=1e5+10;
bool vis[maxn]; struct node
{
int a,b;
}p[maxn]; bool cmp(node x,node y)
{
return x.a<y.a;
}
int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout);
int T ;
cin>>T;
while(T--)
{
memset(vis,0,sizeof(vis));
int n; scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&p[i].a);
for(int i=1;i<=n;i++) scanf("%d",&p[i].b);
sort(p+1,p+1+n,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
if(vis[i]) continue;
vis[i]=1;
if(p[i].a==p[i].b) ans++;
else
{
int pos=p[i].b;
while(!vis[pos])
{
ans++;
vis[pos]=1;
pos=p[pos].b;
}
}
}
printf("%d\n",ans);
}
//system("pause");
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. 记录一次bug解决过程:git深入学习和JDK8新特性
  2. Print a Binary Tree in Vertical Order
  3. Linux学习笔记(二)2015.4.14
  4. 建议入门-用ArcMap进行空间查询与空间连接
  5. android的入门学习
  6. ORACLE EXPDP命令使用详细【转】
  7. PostgreSQL的schema信息,存储于何处
  8. URAL 1081 Binary Lexicographic Sequence
  9. Eclipse用法和技巧四:生成说明文档1
  10. HDU - 5547 Sudoku(数独搜索)
  11. Activity 之生命周期
  12. 使用Jenkins docker镜像运行Jenkins服务
  13. hdu2602 Bone Collector 01背包
  14. 【计算机网络】OSI七层模型图解
  15. boost的下载和安装(windows版)
  16. token令牌
  17. 初级字典树查找在 Emoji、关键字检索上的运用 Part-3
  18. PHP/ThinkPHP5 框架集成微博登录入库流程示意
  19. Building Your First App(创建你的第一个应用程序)
  20. Linux System V Semaphore semget多进程同时创建缺陷解决方法

热门文章

  1. Electromagnetic
  2. H5新增的标签和属性
  3. Daemon——守护进程
  4. SpringMVC 注解配置
  5. 本周总结(19年暑假)—— Part3
  6. 虚拟对抗训练(VAT):一种用于监督学习和半监督学习的正则化方法
  7. python多线程采集图片
  8. HashSet原理
  9. 吴裕雄--天生自然PYTHON爬虫:爬虫攻防战
  10. 【转载】C#常用控件属性及方法介绍