国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

hihoCoder 1067 : 最近公共祖先·二(map+離線Tarjan算法)

2019-11-10 21:55:46
字體:
供稿:網(wǎng)友

題目鏈接:http://hihocoder.com/PRoblemset/problem/1067

【思路分析】離線算法是把所有的詢問先存儲起來,然后在深搜的過程中計算結(jié)果。本題本來就是一棵有根樹,應(yīng)該先計算根節(jié)點是多少,然后再從根節(jié)點進行深搜。實現(xiàn)為+深搜+并查集。 【AC代碼】

#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#include<map>#include<vector>using namespace std;#define N 100005int n,m;vector<int>G[N];map<string,int>num;vector<pair<int, int> >indexQuery[N];int result[N];int pre[N];string Name[N];int fin(int x){ if(pre[x]==x) { return x; } else { return pre[x]=fin(pre[x]); }}int fin1(int x){ if(pre[x]==-1) { return x; } else { return pre[x]=fin(pre[x]); }}void lca(int u){ pre[u]=u; for(int i=0;i<G[u].size();i++) { int v=G[u][i]; lca(v); pre[v]=u; } for(int j=0;j<indexQuery[u].size();j++) { pair<int, int> p=indexQuery[u][j]; if(pre[p.first]!=-1) { result[p.second]=fin(p.first); } }}int main(){ while(~scanf("%d",&n)) { num.clear(); int cnt=0; //memset(pre,-1,sizeof(pre)); for(int i=0;i<N;i++)pre[i]=-1; for(int i=0;i<n;i++) { string str1,str2; cin>>str1>>str2; if(num.count(str1)==0) { num[str1]=cnt; Name[cnt]=str1; cnt++; } if(num.count(str2)==0) { num[str2]=cnt; Name[cnt]=str2; cnt++; } G[num[str1]].push_back(num[str2]); pre[num[str2]]=num[str1]; } scanf("%d",&m); for(int i=0;i<m;i++) { string str1,str2; cin>>str1>>str2; int num1=num[str1]; int num2=num[str2]; indexQuery[num1].push_back(make_pair(num2, i)); indexQuery[num2].push_back(make_pair(num1, i)); } int root=fin1(0); for(int i=0;i<N;i++)pre[i]=-1; lca(root); for(int i=0;i<m;i++) { cout<<Name[result[i]]<<endl; } } return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄢陵县| 纳雍县| 平顺县| 长岛县| 讷河市| 钟山县| 明光市| 小金县| 和林格尔县| 美姑县| 宜良县| 五台县| 正镶白旗| 安化县| 卓尼县| 绥棱县| 同德县| 剑阁县| 潍坊市| 湖南省| 东莞市| 扶绥县| 陆丰市| 若尔盖县| 安远县| 安化县| 洛宁县| 江永县| 平陆县| 习水县| 新野县| 额济纳旗| 海城市| 南丹县| 东乡族自治县| 嵊泗县| 井研县| 宣武区| 合肥市| 克东县| 紫云|