poj——1470 Closest Common Ancestors
| Time Limit: 2000MS | Memory Limit: 10000K | |
| Total Submissions: 20804 | Accepted: 6608 |
Description
Input
nr_of_vertices
vertex:(nr_of_successors) successor1 successor2 ... successorn
...
where vertices are represented as integers from 1 to n ( n <= 900 ). The tree description is followed by a list of pairs of vertices, in the form:
nr_of_pairs
(u v) (x y) ...
The input file contents several data sets (at least one).
Note that white-spaces (tabs, spaces and line breaks) can be used freely in the input.
Output
For example, for the following tree:

Sample Input
5
5:(3) 1 4 2
1:(0)
4:(0)
2:(1) 3
3:(0)
6
(1 5) (1 4) (4 2)
(2 3)
(1 3) (4 3)
Sample Output
2:1 5:5
Hint
Source
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 10100
using namespace std;
char ch;
vector<int>vec[N],que[N];
int t,s,n,m,x,y,num,qx[N],qy[N],fa[N],dad[N],ans[N],root,ans1[N];
int read()
{
,f=; char ch=getchar();
; ch=getchar();}
+ch-'; ch=getchar();}
return x*f;
}
int find(int x)
{
if(fa[x]==x) return x;
fa[x]=find(fa[x]);
return fa[x];
}
int tarjan(int x)
{
fa[x]=x;
;i<vec[x].size();i++)
if(vec[x][i]!=dad[x])
dad[vec[x][i]]=x,tarjan(vec[x][i]);
;i<que[x].size();i++)
if(dad[y=qx[que[x][i]]^qy[que[x][i]]^x])
ans1[que[x][i]]=find(y);
fa[x]=dad[x];
}
void begin()
{
;i<=n;i++)
vec[i].clear(),que[i].clear();
memset(fa,,sizeof(fa));
memset(ans,,sizeof(ans));
memset(dad,,sizeof(dad));
memset(ans1,,sizeof(ans1));
}
int main()
{
while(scanf("%d",&t)!=EOF)
{
s=t;begin();
while(t--)
{
x=read();
n=read();
;i<=n;i++)
{
y=read();fa[y]=x;
vec[x].push_back(y);
vec[y].push_back(x);
}
}
;i<=s;i++)
if(!fa[i]) root=i;
memset(fa,,sizeof(fa));
memset(ans,,sizeof(ans));
m=read();
;i<=m;i++)
{
qx[i]=read(),qy[i]=read();
que[qx[i]].push_back(i);
que[qy[i]].push_back(i);
}
tarjan(root);
;i<=m;i++)
ans[ans1[i]]++;
;i<=s;i++)
if(ans[i]) printf("%d:%d\n",i,ans[i]);
}
;
}
tarjan暴空间、、、
O(≧口≦)O气死了,蒟蒻表示以后再也不用tarjan了!!!!!!!!!!!!
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 910
using namespace std;
vector<int>vec[N];
int n,m,s,x,y,dad[N],fa[N],top[N],deep[N],size[N],ans[N];
int read()
{
,f=; char ch=getchar();
; ch=getchar();}
+ch-'; ch=getchar();}
return x*f;
}
int lca(int x,int y)
{
for(;top[x]!=top[y];)
{
if(deep[top[x]]<deep[top[y]])
swap(x,y);
x=fa[x];
}
if(deep[x]>deep[y])
swap(x,y);
return x;
}
int dfs(int x)
{
size[x]=;
deep[x]=deep[fa[x]]+;
;i<vec[x].size();i++)
if(vec[x][i]!=fa[x])
{
fa[vec[x][i]]=x;
dfs(vec[x][i]);
size[x]+=size[vec[x][i]];
}
}
int dfs1(int x)
{
;
if(!top[x]) top[x]=x;
;i<vec[x].size();i++)
if(vec[x][i]!=fa[x]&&size[t]<size[vec[x][i]])
t=vec[x][i];
if(t) top[t]=top[x],dfs1(t);
;i<vec[x].size();i++)
if(vec[x][i]!=fa[x]&&vec[x][i]!=t)
dfs1(vec[x][i]);
}
int begin()
{
;i<=n;i++)
vec[i].clear();
memset(fa,,sizeof(fa));
memset(top,,sizeof(top));
memset(ans,,sizeof(ans));
memset(dad,,sizeof(dad));
memset(deep,,sizeof(deep));
memset(size,,sizeof(size));
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
s=n;begin();
while(n--)
{
x=read();m=read();
;i<=m;i++)
{
y=read();dad[y]=x;
vec[x].push_back(y);
vec[y].push_back(x);
}
}
;i<=s;i++)
if(!dad[i])
{dfs(i);dfs1(i);break;}
m=read();
;i<=m;i++)
{
x=read(),y=read();
ans[lca(x,y)]++;
}
;i<=s;i++)
if(ans[i]) printf("%d:%d\n",i,ans[i]);
}
;
}
poj——1470 Closest Common Ancestors的更多相关文章
- POJ 1470 Closest Common Ancestors(最近公共祖先 LCA)
POJ 1470 Closest Common Ancestors(最近公共祖先 LCA) Description Write a program that takes as input a root ...
- POJ 1470 Closest Common Ancestors 【LCA】
任意门:http://poj.org/problem?id=1470 Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000 ...
- POJ 1470 Closest Common Ancestors (LCA,离线Tarjan算法)
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 13372 Accept ...
- POJ 1470 Closest Common Ancestors
传送门 Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 17306 Ac ...
- POJ 1470 Closest Common Ancestors (LCA, dfs+ST在线算法)
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 13370 Accept ...
- poj 1470 Closest Common Ancestors LCA
题目链接:http://poj.org/problem?id=1470 Write a program that takes as input a rooted tree and a list of ...
- POJ - 1470 Closest Common Ancestors(离线Tarjan算法)
1.输出测试用例中是最近公共祖先的节点,以及这个节点作为最近公共祖先的次数. 2.最近公共祖先,离线Tarjan算法 3. /* POJ 1470 给出一颗有向树,Q个查询 输出查询结果中每个点出现次 ...
- POJ 1470 Closest Common Ancestors【近期公共祖先LCA】
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013912596/article/details/35311489 题目链接:http://poj ...
- POJ 1470 Closest Common Ancestors【LCA Tarjan】
题目链接: http://poj.org/problem?id=1470 题意: 给定若干有向边,构成有根数,给定若干查询,求每个查询的结点的LCA出现次数. 分析: 还是很裸的tarjan的LCA. ...
随机推荐
- js插件之Ocupload
使用方法: var myUpload = $(element).upload({ name: 'file', action: '', enctype: 'multipart/form-data', p ...
- Android EditText 输入金额(小数点后两位)
EditText edit = new EditText(context); InputType.TYPE_NUMBER_FLAG_DECIMAL //小数点型 InputType.TYPE_CLAS ...
- web页面打印--铺满A4
css <style type="text/css"> body { margin: 0; padding: 0; background-color: #FAFAFA; ...
- .NET Core MVC Web最最最基础的框架搭建
1. 使用VS创建.NET Core MVC Web项目 创建完成就是酱紫的了 2. 用NuGet把这些全部都安装了 Install-Package Microsoft.EntityFramework ...
- 洛谷——P2680 运输计划
https://www.luogu.org/problem/show?pid=2680 题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每 ...
- com口操作excel
_Application app; //Excel应用程序接口 Workbooks books; //工作薄集合 _Workbook book; //工作薄 Work ...
- 【HTML5】可以省略标记的元素
- Js获取操作系统版本 && 获得浏览器版本
//利用原生Js获取操作系统版本function getOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.plat ...
- thinkphp5中vendor的使用?
1.创建处理数组的类ArrayList.php <?php /** * ArrayList实现类 * @author liu21st <liu21st@gmail.com> */ c ...
- python3+beautifulSoup4.6抓取某网站小说(二)基础功能设计
本章学习内容:1.网页编码还原读取2.功能设计 stuep1:网页编码还原读取 本次抓取对象: http://www.cuiweijuxs.com/jingpinxiaoshuo/ 按照第一篇的代码来 ...