POJ 1470 Closest Common Ancestors (模板题)(Tarjan离线)【LCA】
<题目链接>
题目大意:
给你一棵树,然后进行q次询问,然后要你统计这q次询问中指定的两个节点最近公共祖先出现的次数。
解题分析:
LCA模板题,下面用的是离线Tarjan来解决。并且为了代码的简洁,本代码用的是vector存图。
#include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; ; vector<int>edge[N]; int query[N][N],father[N],count[N],indeg[N]; bool vis[N]; int n,m; void init(){ ;i<=n;i++)edge[i].clear(); memset(query,,sizeof(query)); memset(vis,false,sizeof(vis)); memset(count,,sizeof(count)); memset(indeg,,sizeof(indeg)); } int find(int x){ //找到根节点 if(x!=father[x]) father[x]=find(father[x]); return father[x]; } void Tarjan(int u){ father[u]=u; ;i<edge[u].size();i++){ //得到该树上所有节点的父子关系 int v=edge[u][i]; Tarjan(v); father[v]=u; } vis[u]=true; ;i<=n;i++) if(vis[i] && query[u][i]) count[find(i)]+=query[u][i]; //最近公共祖先出现次数+1 } int main(){ while(~scanf("%d",&n)){ init(); int u,v; ;i<n;i++){ scanf("%d:(%d)",&u,&m); while(m--){ scanf(" %d",&v); edge[u].push_back(v); //建立有向边 indeg[v]++; //统计入度,用于寻找根节点 } } scanf(" %d",&m); ;i<m;i++){ scanf(" (%d %d)",&u,&v); query[u][v]++; //将代查询的节点也全部记录下来 query[v][u]++; } ;i<=n;i++) ){ Tarjan(i); break; } ;i<=n;i++) if(count[i]) printf("%d:%d\n",i,count[i]); } ; }
2018-10-21
POJ 1470 Closest Common Ancestors (模板题)(Tarjan离线)【LCA】的更多相关文章
- 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 的离线算法Tarjan)
Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...
- POJ 1470 Closest Common Ancestors【近期公共祖先LCA】
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013912596/article/details/35311489 题目链接:http://poj ...
- 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 (LCA, dfs+ST在线算法)
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 13370 Accept ...
- POJ 1470 Closest Common Ancestors
传送门 Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 17306 Ac ...
- poj——1470 Closest Common Ancestors
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 20804 Accept ...
- POJ 1470 Closest Common Ancestors【LCA Tarjan】
题目链接: http://poj.org/problem?id=1470 题意: 给定若干有向边,构成有根数,给定若干查询,求每个查询的结点的LCA出现次数. 分析: 还是很裸的tarjan的LCA. ...
随机推荐
- Confluence 6 用户宏最佳实践
这个页面为你在创建用户宏的最佳实践中包含了一些小技巧和建议. 为你的宏添加一个简短的描述 我们鼓励你为你的宏在 模板(Template )添加一个备注的描述,可以参考下面的显示的内容: ## Macr ...
- SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案
那是因为你在使用自己写的分类时没有指定返回的数据类型 指定下返回数据类型就好了 我是用的oc写的分类在Swift中使用的 错误代码 private lazy var btn = UIButton.C ...
- mysql 安装问题二:mysqld: Can't create directory 'E:\Software\mysql-5.7.24-winx64\data\' (Errcode: 2 - No such file or directory)
原因:my.ini文件中的basedir(设置mysql的安装目录).datadir(设置mysql数据库的数据的存放目录)与MySQL解压后的路径不一致 解决办法: 将basedir=E:\Soft ...
- 用flask实现的分页
一.flask实现的分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): "&quo ...
- 自定义Form组件
一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- JSP 动作
动作是第三种类型的语法元素,它们被转换成Java 代码来执行操作,如访问一个Java对象或调用方法. 一. useBean useBean将创建一个关联Java对象的脚本变量.这 是早期分离的表示层和 ...
- 异常小结:上一张图搞清楚Java的异常机制
下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的. Throwable Throwable是Java异常的顶级类,所有的异常都继承于这个类. Error,Excepti ...
- API接口加密方式说明
标签: 接口 2016年10月11日 19:41:20 13299人阅读 评论(0) 收藏 举报 分类: API(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog ...
- Jmeter中通过beanshell写入CSV的脚本
import com.csvreader.CsvWriter; String NewDataPath=bsh.args[0]; NewDataPath=NewDataPath.replaceAll(& ...
- 专注笔试算法20年(C语言版)
1.C语言实现链表数据的反转({1,2,3,4}->{4,3,2,1}). int trav(PNode *head){ PNode p_1,p_2,tmp; //判断参数是否有效 if(*he ...