zoukankan      html  css  js  c++  java
  • [洛谷P2814]家谱

    题目大意:给出一些父子的关系,求他们的最远祖先。

    解题思路:并查集题目,但给出的是名字,所以要用map给每个人的名字编号。

    C++ Code:

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    map<string,int>p;
    string pp[50500];
    string s;
    int cnt;
    int fa[50500];
    int dad(int x){return(fa[x]==x)?(x):(fa[x]=dad(fa[x]));}
    char ch;
    int main(){
    	ios::sync_with_stdio(false);
    	cnt=0;
    	for(int i=1;i<=50005;++i)
    	fa[i]=i;
    	cin>>ch;
    	while(ch!='?'){
    		cin>>s;
    		if(!p.count(s))p[s]=++cnt,pp[cnt]=s;
    		int f=p[s];
    		while(cin>>ch&&ch=='+'){
    			cin>>s;
    			if(!p.count(s))p[s]=++cnt,pp[cnt]=s;
    			int sn=p[s];
    			int df=dad(f),ds=dad(sn);
    			if(df!=ds)
    			fa[ds]=df;
    		}
    	}
    	while(ch!='$'){
    		cin>>s;
    		cout<<s<<' '<<pp[dad(p[s])]<<endl;
    		cin>>ch;
    	}
    	return 0;
    }
    
  • 相关阅读:
    Bellman-Ford算法
    POJ 1990 MooFest
    POJ3067:Japan(树状数组求逆序对)
    树状数组求逆序对
    树状数组
    Is It A Tree?(hdu1325)
    强连通图 Tarjan算法
    UVALive
    UVALive
    Problem Statement
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7301086.html
Copyright © 2011-2022 走看看