zoukankan      html  css  js  c++  java
  • hihoCoder #1062 : 最近公共祖先·一

    题意:

      提供一棵家族树,询问两点的LCA。

    思路:

      看大神代码得知此思路。用map保存儿子到父亲的映射,查询时,两人共同回溯到根,中间相遇的那个节点就是答案了。先用其中一个来回溯到根,记录路径上的节点为访问过,再用另一个来回溯到根,期间只要第一次碰到已经访问过的节点,就是答案。

     1 #include <iostream>
     2 #include <map>
     3 #include <cstdio>
     4 #include <string>
     5 using namespace std;
     6 map<string,string> sontofar;
     7 map<string,int> vis;
     8 
     9 void check(string tmp1,string tmp2)
    10 {
    11     vis.clear();
    12     string ind=tmp1;
    13     while( !ind.empty() )
    14     {
    15         vis[ind]=1;
    16         ind=sontofar[ind];        //找不到就是空了
    17     }
    18 
    19     ind=tmp2;
    20     while( !ind.empty() && vis[ind]==0 )
    21         ind=sontofar[ind];
    22 
    23     if(ind.empty())
    24         cout<<"-1"<<endl;
    25     else
    26         cout<<ind<<endl;
    27 }
    28 
    29 int main()
    30 {
    31     //freopen("input.txt","r",stdin);
    32     int t, p=0;
    33     string tmp1, tmp2;
    34 
    35     cin>>t;
    36     while(t--)
    37     {
    38         cin>>tmp1>>tmp2;
    39         sontofar[tmp2]=tmp1;
    40     }
    41 
    42     cin>>t;
    43     while(t--)
    44     {
    45         cin>>tmp1>>tmp2;
    46         check(tmp1,tmp2);
    47     }
    48     return 0;
    49 }
    AC代码
  • 相关阅读:
    commons-dbutils实现增删改查(spring新注解)
    commons-dbutils实现增删改查
    配置扫描注解的包
    常用注解
    注入集合类型数据
    spring创建bean的三种方式
    switch
    jvm编译器的优化
    java9小工具jshell
    java三元运算符
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4459868.html
Copyright © 2011-2022 走看看