您的位置:首页 > 其它

hihocoder #1067 LCA

2015-11-01 13:03 393 查看
裸LCA,练模板

#include<iostream>
#include<map>
#include <string.h>
#include<algorithm>
#include<fstream>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a)   memset(a,0,sizeof(a))
const int maxnum =100005;
const int mod = 1000000007;
int n,m,len,deepest;
char* ans[maxnum];
struct node
{
char*					name;
bool					visit;
node*					anc;
vector<node*>			son;
vector<pair<node*,int>>	query;
node():					name(NULL),
anc(NULL),
son(),
visit(0),
query(){}
node(char *str):		anc(NULL),
son(),
visit(0),
query(){
name = new char[strlen(str)];
strcpy(name,str);
}
node(string str){
node(str.c_str());
}
~node(){
if(name)
delete[] name;
}
};
node* root;
map<string,node*> name2node;

node* findanc(node* rt){
if(rt->anc!=rt){
findanc(rt->anc);
rt->anc = rt->anc->anc;
}
return rt->anc;
}

void dfs(node* rt){
rt->anc=rt;
int si = rt->son.size();
FOR(i,0,si-1){
dfs(rt->son[i]);
rt->son[i]->anc=rt;
}
rt->visit=1;
si= rt->query.size();
FOR(i,0,si-1){
if(rt->query[i].first->visit){
ans[rt->query[i].second]=findanc(rt->query[i].first)->name;
}
}
}

int main()
{
/*fstream fin("G:/1.txt");
fin>>n;*/
cin>>n;
char name[1000];
root=0;
node *far,*son;
FOR(i,1,n){
scanf("%s",name);
/*fin>>name;*/
if(name2node[name]==0){
far = new node(name);
name2node[name]=far;
}
else far = name2node[name];
if(i==1)
root = far;
scanf("%s",name);
/*fin>>name;*/
if(name2node[name]==0){
son = new node(name);
name2node[name]=son;
}else
far = name2node[name];
far->son.push_back(son);
}
cin>>m;
/*fin>>m;*/
FOR(i,1,m){
scanf("%s",name);
/*fin>>name;*/
far = name2node[name];
scanf("%s",name);
/*fin>>name;*/
son = name2node[name];
far->query.push_back(mp(son,i));
son->query.push_back(mp(far,i));
}

dfs(root);
FOR(i,1,m){
printf("%s\n",ans[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj LCA