POJ1330 TarjanLCA
2016-08-08 19:14
218 查看
LCA裸题。
试着写了一下离线LCA算法。
自己的代码:
试着写了一下离线LCA算法。
自己的代码:
#include<cstdio> #include<cstring> using namespace std; int n,t; bool rt[10001]; struct e { int t; e *n; e(int t,e *n):t(t),n(n){} }*f[10001]={}; namespace memo { e *stk[10001]; int top=-1; void recycle(int n) { for(int i=1;i<=n;i++) if(f[i]) { stk[++top]=f[i]; f[i]=0; } } e *alloc(int t,e *n) { if(top!=-1) { e *prov=stk[top]; stk[top]=stk[top]->n; if(!stk[top]) --top; prov->t=t;prov->n=n; < 4000 span class="hljs-keyword">return prov; } return new e(t,n); } } namespace tarjan { int ans; int r[10001]; bool vis[10001]; int aim1,aim2; int find(int x) {return r[r[x]]==r[x]?r[x]:r[x]=find(r[x]);} inline void link(int a,int b) { r[find(b)]=find(a); } void dfs(int x) { vis[x]=1; for(e* i=f[x];i;i=i->n) { dfs(i->t); link(x,i->t); } if(x==aim1&&vis[aim2]) ans=find(aim2); else if(x==aim2&&vis[aim1]) ans=find(aim1); } void work(int n,int a,int b) { memset(vis,0,n+1); aim1=a;aim2=b; int root; for(int i=1;i<=n;i++) { r[i]=i; if(rt[i]) root=i; } dfs(root); } } int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); int a,b; memset(rt,1,n+1); for(int i=1;i<n;i++) { scanf("%d%d",&a,&b); rt[b]=0; f[a]=memo::alloc(b,f[a]); } scanf("%d%d",&a,&b); for(int i=1;i<=n;i++) { if(rt[i]) {tarjan::work(n,a,b);break;} } printf("%d\n",tarjan::ans); memo::recycle(n); } return 0; }
相关文章推荐
- POJ 1330 Nearest Common Ancestors(tarjan LCA 算法)
- POJ 1330 Nearest Common Ancestors(Tarjan离线LCA)
- POJ 1330 Nearest Common Ancestors(LCA Tarjan)
- LCA三种算法学习(离线算法tarjan+在线算法转rmq+在线倍增)例题poj1330、1470;hdu4547、2874
- 【LCA|Tarjan】POJ-1330 Nearest Common Ancestors
- POJ1330:Nearest Common Ancestors(LCA + Tarjan离线处理)
- POJ 1330 Nearest Common Ancestors【LCA_(rmq 在线 + tarjan 离线)】
- POJ 1330 Nearest Common Ancestors 【LCA·Tarjan离线算法】
- POJ 1330 Nearest Common Ancestors LCA(在线RMQ,离线Tarjan)
- [POJ1330]Nearest Common Ancestors(LCA, 离线tarjan)
- 【lca】lca的tarjan写法 poj1330
- poj--1330 Nearest Common Ancestors(LCA/Tarjan)
- LCA Tarjan及倍增模板(POJ 1330)
- POJ 1330 最近公共祖先LCA_Tarjan 【水】
- POJ 1330 ---(线段树在线LCA 与 tarjan离线LCAs)
- POJ 1330 最近公共祖先LCA_Tarjan 【水】
- POJ 1330 Nearest Common Ancestors Tarjan求LCA
- poj1330 Nearest Common Ancestors LCA Tarjan 待补完
- POJ 1330 最近公共祖先LCA(Tarjan离线做法)
- POJ 1330 Nearest Common ancesters(LCA,Tarjan离线算法)