LCS(HDU_5495 循环节)
2024-08-30 22:16:16
传送门:LCS
题意:给出两个序列an和bn,想在给出一个序列pn,问经过a[p1],,,,a[pn]和b[p1],,,b[pn]变换后序列a和序列b的最长公共子序列的长度是多少。
思路:对a[i]->b[i]建边,最终总能形成一个环,对于这个长度为L的环,我们总能找到一个长度为L-1的LCS。所以,我们只要用序列的长度减去长度大于1的环的个数就是最终的结果。
例如:
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+;
typedef long long ll;
int a[maxn],b[maxn],c[maxn];
int vis[maxn]; inline void init()
{
memset(vis,,sizeof(vis));
return;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
int n;
scanf("%d",&n);
for(int i = ; i<=n; i++)
scanf("%d",&a[i]);
for(int i = ; i<=n; i++)
{
scanf("%d",&b[i]);
c[a[i]] = b[i];
}
int ans = n;
for(int i = ; i<=n; i++)
{
int t = i;
if(c[t] != t && !vis[t])
{
ans--;
while(!vis[t])
{
vis[t] = ;
t = c[t];
}
}
}
printf("%d\n",ans);
}
return ;
}
/*
样例输入:
2
3
1 2 3
3 2 1
6
1 5 3 2 6 4
3 6 2 4 5 1
样例输出:
2
4
*/
最新文章
- ios – 使用UINib加载xib文件实现UITableViewCell
- Vcenter server 5.5添加用户角色及分配权限
- sublime: useful commands
- servlet&;jsp高级:第三部分
- Android系统移植与驱动开发--第三章 Git使用入门及在学习中有感
- [工具]sublime text2-前端开发利器
- php学习之道:WSDL具体解释(三)
- spring3.1........jar包下载
- 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
- html5 浏览文件
- react插件包
- oracle-taf
- linux zip tar 压缩打包命令
- MySQL--时间戳属性2
- js sort
- C# 文件存在,但是File.Exists 判断不存在的问题
- Matlab绘图控制命令
- ios app 实现热更新(无需发新版本号实现app加入新功能)
- 【leetcode 简单】第十八题 爬楼梯
- div的隐藏占用空间位置关系