hdu - 5495 - LCS (사고방식)

링크:
http://acm.hdu.edu.cn/showproblem.php?pid=5495
제목:
두 서열 An 과 Bn 을 알려 드 리 겠 습 니 다. 모두 {1, 2,... n} 의 배열 입 니 다. 그리고 지금 은 각 열 을 임의로 교환 할 수 있 습 니 다. 그 다음 에 가장 긴 공공 하위 서열 이 얼마나 되 는 지 물 어보 세 요.
#include 
using namespace std;
const int maxn =1e5+19;
struct Node
{
    int a,b;
} node[maxn];
bool vis[maxn];
int pos[maxn];
int main()
{
    ios::sync_with_stdio(false);
    int t,n;
    cin>>t;
    while(t--)
    {
        cin>>n;
        memset(vis,0,sizeof vis);
        for(int i=1; i<=n; i++)
        {
            cin>>node[i].a;
            pos[node[i].a]=i;
        }
        for(int j=1; j<=n; j++)
        {
            cin>>node[j].b;
        }
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            if(vis[node[i].a])
                continue;
            int equa=0;
            int x=node[i].b;
            int j=node[i].a;
            while(x!=node[i].a)
            {
                vis[j]=1;
                // int po=pos[x];
                int po =pos[x];
                x=node[po].b;
                j=node[po].a;
                equa++;
            }
            vis[j]=1;
            if(equa>0)
                ans++;
        }
        cout<

좋은 웹페이지 즐겨찾기