摘要: 题意:给出一棵树,再给出两个节点a、b,求离它们最近的公共祖先。方法一: 先用vector存储某节点的子节点,fa数组存储某节点的父节点,最后找出fa[root]=0的根节点root。 之后求每个节点的“高度”,更节点的高度为1,每往下一层高度+1。 读取a和b后,先求出它们位于同一个高度的祖先: 1.若此祖先相同,则即为最近的公共祖先。 2.若不相同,则求各自的父节点,知道两者的父节点相同,即为最近的公共祖先。#include #include #include #include #include using namespace std;const int maxn=10010;int n. 阅读全文
posted @ 2013-09-27 21:31 辰曦~文若 阅读(208) 评论(0) 推荐(0)
摘要: 题意:给出一个序列,求至少需要用到多少次操作,才能将序列从小到大排序。思路: 数据量很大,n#include #include #include using namespace std;const int maxn=500000;int a[maxn+10]; //存储离散后的数据序列,顺序是原来序列的顺序int c[maxn+10]; //树状数组求和int n;struct Node{ int idx,ranks; //一开始的位置,离散后的值 long long value; //最初的值}node[maxn+10];//按value从小到大排序bool cmp1(... 阅读全文
posted @ 2013-09-27 14:57 辰曦~文若 阅读(352) 评论(0) 推荐(0)