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

    用的dfs,自下往上搜索一个节点的所有祖先,然后在相应祖先 判断是否是另一个节点的祖先,如果是 就截止,否则继续往上搜索,直到搜索到,或者知道所有的祖先都被扫描完成

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e3+10;
    
    int n;
    int cnt, tot;
    map<string ,int> mp;
    string s[N];
    
    vector<int> son[N], fa[N];
    string s1, s2;
    
    int getId(string str)
    {
        if(mp[str]) {
            return mp[str];
        }
        mp[str] = (++cnt);
        s[cnt] = str;
        return cnt;
    }
    
    int dfs(int u, int v) {
        if(u == v) return true;
        for(int i=0; i<son[u].size(); i++) {
            int x = son[u][i];
            //cout << s[x] <<" ";
            if(dfs(son[u][i], v)) {
                return true;
            }
        }
        //cout<<"
    ";
        return false;
    }
    
    int main()
    {
        freopen("in.txt","r",stdin);
        scanf("%d", &n);
        for(int i=1; i<=n; i++) {
            cin >> s1 >> s2;
            int u = getId(s1);
            int v = getId(s2);
            son[u].push_back(v);
            fa[v].push_back(u);
        }
        int m; scanf("%d",&m);
        while(m--) {
            cin >> s1 >> s2;
            int u = getId(s1);
            int v = getId(s2);
            // cout <<u <<" "<< v<<"
    ";
            bool flag=0;
            queue<int> que;
            que.push(u);
            while(!que.empty()) {
                int tmp=que.front(); que.pop();
                //cout << s[tmp]<<"
    ";
                for(int i=0; i<fa[tmp].size(); i++) {
                    que.push(fa[tmp][i]);
                }
                if(dfs(tmp,v)) {
                    flag = true;
                    cout << s[tmp] <<endl;
                    break;
                }
            }
            if(!flag) 
                puts("-1");
            
        }
        return 0;
    }
  • 相关阅读:
    POJ2828
    Docker容器修改端口映射
    CentOS 7使用ISO镜像配置本地yum源
    Windows 自带的 Linux 子系统
    vue富文本编辑器插件vue-quill-editor使用
    修改docker容器存放位置
    Linux 硬盘相关操作
    centos7基础相关
    ubuntu-k8s搭建
    redhat 6.6 离线docker
  • 原文地址:https://www.cnblogs.com/Draymonder/p/10007484.html
Copyright © 2011-2022 走看看