最低公共祖先 pat1151

#include <iostream>
#include<queue>
#include<vector>
#include<map>
//1151
const int N = 1e4+5;
using namespace std;
int m,n;
map<int,int> m1;
int main()
{
       freopen("1151.txt","r",stdin);
       cin>>m>>n;
       int a, b, pre[N];
       for(int i = 0;i<n;i++){
              cin>>a;
              m1[a] = i;
       }
       for(int i = 0; i <n;i++){
              cin>>pre[i];
       }
       int sa, sb, sc;
       while(m--){
              cin>>sa>>sb;
              if(m1.find(sa) == m1.end() && m1.find(sb) == m1.end()){
                     printf("ERROR: %d and %d are not found.\n",sa,sb);
                     continue;
              }
              if(m1.find(sa) == m1.end()){
                     printf("ERROR: %d is not found.\n",sa);
                     continue;
              }
              if(m1.find(sb) == m1.end()){
                     printf("ERROR: %d is not found.\n",sb);
                     continue;
              }
              int x =sa, y =sb;
              sa = m1[sa], sb = m1[sb];
              for(int i = 0;i < n;i++){
                     sc=m1[pre[i]];
                     if((sc>sa && sc<sb) || (sc>sb && sc < sa)){
                            printf("LCA of %d and %d is %d.\n",x,y,pre[i]);
                            break;
                     }

                     if(sc == sa){
                            printf("%d is an ancestor of %d.\n",x,y);
                            break;
                     }

                     if(sc == sb){
                             printf("%d is an ancestor of %d.\n",y,x);
                             break;
                     }


              }
       }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章