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. ...
随机推荐
- 浅析套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Socket的基本背景 在讨论这两个选项的区别时,我们需要知道的是BSD实现是所有socket实现的起源.基本上其他所有的系统某种程度上都参考了BSD socket实现(或者至少是其接口),然后开始了 ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- windows echo命令
ECHO命令是大家都熟悉的DOS批处理命令的一条子命令,但它的一些功能和用法也许你并不是全都知道,不信你瞧: 1. 作为控制批处理命令在执行时是否显示命令行自身的开关 格式:ECHO [ON|OFF ...
- Mac下Eclipse/adb无法调试MX5手机
前提是环境已经配置好,其他手机可以连接但MX系列不可以 解决方法:打开终端 echo 0x2a45 >> ~/.android/adb_usb.ini adb kill-server ad ...
- ZooKeeper系列(四)
一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分.简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和 ...
- Importing Swift into Objective-C
Overview You can work with types declared in Swift from within the Objective-C code in your project ...
- Python之三元运算、集合、函数
一.三元运算符 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值 格式:[on_true] if [expression] else [on_false] res = 值1 if 条件 els ...
- SQLServer锁的概述
SQLServer锁的概述 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了 ...
- jq进度条
<!doctype html><html><head><meta charset="utf-8"><title>JQue ...
- 51nod 1057 n的阶乘 (压位优化)
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1057&judgeId=605203 使用压位进行优化, ...