随笔分类 - 数据结构
摘要:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 首先我们来看下面一段死锁代码 thread1 get athread2 get b 上面代
阅读全文
摘要:3306: 树 1.思路 首先dfs整颗树将树转换线性结构,前两个操作比较简单,然后主要是对于操作三,有三种情况: 1.x=rt,那么我们直接求出整颗树中的最小值就是答案; 2.x在原树中为rt的祖先节点,那么我们首先求出从x到rt路径上的x的第一个节点y,那么答案就是除了以y为根的子树的其他所有节
阅读全文
摘要:3747: [POI2015]Kinoman 1.思路 对于此类问题,我们采用枚举右端点的方法来求解,当要添加第i天所要看的电影时,那么从上一次出现f[i]电影的地方pre[i]+1到第i天,我们加上好看值w[f[i]], 同时从pre[pre[i]]+1到pre[i], 因为存在重复,所以我们减去
阅读全文
摘要:CodeForces - 620E 1.题意 对于一棵树进行以下两种操作: 1 v c 将根为v的子树全部染色为c 2 v 查询根为v的子树的颜色的个数 2.思路 首先利用dfs时间序将树转化为线性结构,然后利用线段树进行区间颜色数的处理,然后因为只有60种颜色,那么我们可以用一个long long
阅读全文
摘要:[SDOI2009]HH的项链 1.思路 题目的意思就是给一个 序列,然后多个询问,对于每个询问,给出一个区间,让你求出这个区间的不同元素的个数,此类问题目前我所知道有三种方法: (1).主席树 (2).莫队算法 (3).树状数组,假定我们要处理的数组为a,首先我们将所有的询问区间按左端点从小到大排
阅读全文
摘要:题目链接 1.思路 扫描数组,以root[i]为根的线段树上记录的是从第一个位置到i位置的数字信息,即当前线段树上的节点记录的是数组的位置信息; 2.code
阅读全文
摘要:题目链接 ##### 思路 括号 配对问题是一个典型的堆栈问题,对于每一个右括号,与之配对的左括号必然是之前所有未配对的左括号中的最右边一个;因此我们将字符串从左到右扫描,当出现左括号时,将其加入栈中;当出现右括号时,我们判断栈顶的括号是否与当前的右括号配对; #####code
阅读全文
摘要:#include <iostream> using namespace std; int father[100]; //初始化 void init() { for(int i = 0; i < 100; ++ i) { father[i] = i; } } //查找根节点,按路径优化 int fin
阅读全文
摘要:##### 思路 题目的大致意思就是求有最大和的子序列,我的方法是边读取数据边处理,当和出现为负值是记录当前点的前一个为右端点,当和大于最大值是更新左右端点; 特别要注意的是数据可能全为负,因此max的值应初始化为负值。##### code #include <iostream> #include
阅读全文
摘要:昨天碰到了个盒子分形问题,其实刚开始看上去没思路,后来看题可以把这个问题用递归解决,把问题分割解决。 **题目如下:** (1)规模为1的盒子分形为 X (2)规模为2的盒子分形为 X X X X X (3)若用B(n - 1)表示规模为n-1的盒子分形,则规模为n的盒子分形为 B(n - 1) B
阅读全文
摘要:题目见此链接 此题主要考察二叉树,根据给出先序遍历和中序遍历求后序遍历。 代码如下: #include <iostream> #include <string> //#include <fstream> using namespace std; class Node{ public: Node *l
阅读全文