bestcoder#58(div2) 1002 LCS 置换

bestcoder#58(div2)  1002 LCS    置换

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

Statistic | Submit | Clarifications | Back

在一个长度为L(L-1)的环内部,总可以得到一个长度为L-1的LCS,因此只要找出多少个独立的环就行了。

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define MS0(a) memset(a,0,sizeof(a))

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=(1<<29);

int n,a[maxn],b[maxn];
int Next[maxn];
bool vis[maxn];

int main()
{
    int T;cin>>T;
    while(T--){
        scanf("%d",&n);
        REP(i,1,n) scanf("%d",&a[i]);
        REP(i,1,n) scanf("%d",&b[i]),Next[b[i]]=a[i];
        MS0(vis);
        int ans=0;
        REP(i,1,n){
            if(!vis[i]){
                int cnt=0;
                for(int j=i;!vis[j];j=Next[j]) cnt++,vis[j]=1;
                if(cnt==1) ans++;
                else ans+=cnt-1;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

时间: 2024-08-15 18:57:17

bestcoder#58(div2) 1002 LCS 置换的相关文章

hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002

题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1.  定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2.  对于树A与树B,如果A与B的节点数相同,且无论i为何值,f[A, i]与f[B, i]都相等,则A与B为两棵相似的树. 3.  对于一棵树A,在以节点1为根节点的情况下,如果不存在与其它树与A相似,则A是一棵特殊的树. 输入: 包含多组输入样例. 每组输入样例中首先输入一个整数n,表示一棵含有n个节点的树. 接下来n

Manacher BestCoder Round #49 ($) 1002 Three Palindromes

题目传送门 1 /* 2 Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 3 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间,位运算 >>1 比 /2 速度快,用了程序跑快200ms左右,位运算大法好 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-1

矩阵快速幂---BestCoder Round#8 1002

当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [f(n-1)    f(n-2)] [ 1 1 ]     [ 1 0 ] 设A = [ 1 1 ]  [ 1 0 ] [f(n)   f(n-1)] = [f(n-2)   f(n-3)]*A*A[f(n)   f(n-1)] = [f(2)   f(1)]*A^(n-2)矩阵满足结合律,所以先计算A^

二分图判定+点染色 BestCoder Round #48 ($) 1002 wyh2000 and pupil

题目传送门 1 /* 2 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 3 每一次二分图匹配时,将点多的集合加大最后第一个集合去 4 注意:n <= 1,no,两个集合都至少有一人:ans == n,扔一个给另一个集合 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #in

BestCoder Round #1 1002 项目管理 (HDU 4858)

项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 738    Accepted Submission(s): 260 Problem Description 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值. 现在我

BestCoder Round #4 1002

这题真是丧心病狂,引来今天的hack狂潮~ Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 10    Accepted Submission(s): 3 Problem Description There are N point on X-axis . Miaomiao would like t

HDU BestCoder Round #1 1002 项目管理

项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可能有多条边,不过一条边的两端必然是不同的节点. 每个节点都有一个能量值. 现在我们

贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an的值最优,每次还要和an比较 4 注意:不能选取两个相同的数 5 反思:比赛时想到了%p和sort,lower_bound,但是还是没有想到这个贪心方法保证得出最大值,还是题目做的少啊:( 6 */ 7 #include <cstdio> 8 #include <algorithm>

BestCoder #47 1001&amp;&amp;1002

[比赛链接]clikc here~~ ps:真是wuyu~~做了两小时,A出两道题,最后因为没加longlong全部被别人hack掉!,最后居然不知道hack别人不成功也会掉分,还一个劲的hack 别人的代码,昨天真是个悲催的比赛,~~~~(>_<)~~~~,下面弱弱献上代码~~ 1002比1001还简单~~ 1002  Senior's Gun /* BestCoder Round #47 1002 Senior's Gun */ #include <iostream> #inc