Codechef Union on Tree】的更多相关文章

Codechef Union on Tree https://www.codechef.com/problems/BTREE 简要题意: 给你一棵树,\(Q\)次询问,每次给出一个点集和每个点的\(r_i\),每个点可以覆盖距离小于等于\(r_i\)的点. 问有多少点会被覆盖. 分析: 建出虚树,然后我们做两边\(dp​\)把所有点的\(r_i​\)更新成从这个点能覆盖的最远距离或从其他点出来经过这个点后能够覆盖的最远距离. 这样做的好处是对于一条边\((x,y)\),一定存在一个点\(z\),…
Home » Practice(Hard) » Observing the Tree   https://www.codechef.com/problems/QUERY Observing the Tree Problem Code: QUERY Submit Tweet All submissions for this problem are available. Chef gives you a tree, consisting of N nodes. The nodes are numbe…
已经连咕了好几天博客了:比较经典的题目 题目大意 给出一个 N 个点的树和$K_i$, 求每个点到其他所有点距离中第 $K_i$ 小的数值. 题目分析 做法一:点分树上$\log^3$ 首先暴力做法:对于每个节点维护其他点距离的值域线段树.这个做法的瓶颈在于关于边$(u,v)$线段树的转移.那么可以利用点分树(为了保证复杂度)换一种容斥的思路利用重复的信息:记$f_i$为以$i$为根的点分树内所有其他点到点$i$的距离的值域线段树:$g_i$为以$i$为根的点分树内,所有点到$i$的点分树父亲的…
该思博的时候就思博到底,套路的时候不能再套路的一道题 首先我们将联通块的大小平方和进行转化,发现它就等价于连通点对数,而这个可以转化为连接两点的边数(距离)和 所以我们考虑第\(i\)天时,一个点对\((x,y)\)能产生贡献,当且仅当连接它们的边一条都没断,故贡献为: \[\frac{(n-1-\operatorname{dis}(x,y))^{\underline i}}{(n-1)^{\underline i}}\] 因此我们发现这个东西对于所有距离相同的点对是一样的,因此我们可以直接统计…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点的有根树,标号 1 到 N,以 1 为根.定义一个结点 x 的深度 dep[x] 为 x 到根经过的边的数量. 将整棵树剖分成若干竖直的链(链上结点总是由祖先到后代),每条竖直的链的代价如下: \[\sum_w(C[u] \times (h - dep[w]) + C[u]^2) - H[u]\] 其中 u 是链的最低点,w 是链上的点,h 为…
用GDB调试程序GDB概述 2使用GDB 5GDB中运行UNIX的shell程序 8在GDB中运行程序 8调试已运行的程序 两种方法: 9暂停 / 恢复程序运行 9一.设置断点(BreakPoint) 9二.设置观察点(WatchPoint) 10三.设置捕捉点(CatchPoint) 10四.维护停止点 11五.停止条件维护 12六.为停止点设定运行命令 12七.断点菜单 13八.恢复程序运行和单步调试 13九.信号(Signals) 14十.线程(Thread Stops) 15查看栈信息…
查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用GDB命令来查看当前的栈中的信息. 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息.如: (gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048524 in main (argc=1, argv=0xbffff6…
一.GDB 我用的是 GCC+POWERSHELL+GDB,  GDB刚刚接触也有很多要记的. 二.一个调试示例 tst.c #include <stdio.h> int func(int n) { int sum=0,i; for(i=0; i<n; i++) { sum+=i; } return sum; } int main() { int i; long result = 0; for(i=1; i<=100; i++) { result += i; } printf(&q…
Closest Common Ancestors Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 15446   Accepted: 4944 Description Write a program that takes as input a rooted tree and a list of pairs of vertices. For each pair (u,v) the program determines the…
题目连接  http://poj.org/problem?id=1330 就是构建一棵树,然后问你两个节点之间最近的公共父节点是谁? 代码: /*Source Code Problem: 1330 User: huifeidmeng Memory: 1232K Time: 63MS Language: C++ Result: Accepted Source Code */ #include<iostream> #include<vector> #include<cstdio&…
tarjan---LCA算法的步骤是(当dfs到节点u时): 实际:  并查集+dfs 具体步骤: 1 在并查集中建立仅有u的集合,设置该集合的祖先为u 1 对u的每个孩子v:    1.1 tarjan之    1.2 合并v到父节点u的集合,确保集合的祖先是u 2 设置u为已遍历 3 处理关于u的查询,若查询(u,v)中的v已遍历过,则LCA(u,v)=v所在的集合的祖先. 举例子: 假设遍历完10的孩子,要处理关于10的请求了 取根节点到当前正在遍历的节点的路径为关键路径,即1-3-8-1…
/*this project used for gdb debug c programs*//*At first,using compile command turn out the executable file. exp: gcc -g sourcefile.c -o test.exe */        //!!!/*windows: start gdb debuging(test.exe complete trace) : gdb test.exe *//*Linux: start gd…
学习使用了GDB一段时间后,发现它真的好强大!好用! GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停…
转自http://blog.csdn.net/dadalan/article/details/3758025 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.…
linux下gdb单步调试 用 GDB 调试程序 GDB 概述———— GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 UNIX平台下做软件,你会发现 GDB这个调试工具有比 VC. BCB的图形化调试器更强大的功能.所谓 “寸有所长,尺有所短 ”就是这个道理. 一般来说, GDB主要帮忙你完成下面四个方面的功能: 1 .启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.   …
程序启动: A.冷启动 gdb program              e.g., gdb ./cs gdb –p pid                 e.g., gdb –p `pidof cs` gdb program core      e.g., gdb ./cs core.xxx B.热启动 (gdb) attach pid        e.g., (gdb) attach 2313 C.传入命令行参数 gdb program --args arglist (gdb) set…
select, poll, epoll都是Linux上的IO多路复用机制.知其然知其所以然,为了更好地理解其底层实现,这几天我阅读了这三个系统调用的源码. 以下源代码摘自Linux4.4.0内核. 预备知识 在了解IO多路复用技术之前,首先需要了解Linux内核的3个方面. 1.等待队列waitqueue 等待队列(@ include/linux/wait.h)的队列头(wait_queue_head_t)往往是资源生产者,队列成员(wait_queue_t)往往是资源消费者.当队列头的资源re…
转载:http://blog.csdn.net/mergerly/article/details/41994207 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的.   调试的话输入: gdb filename core     filename就是产生core文件的可执行文件,core就是产生的dump文件   查看栈信息 —————   当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序…
七.设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项. set print address     set print address on         打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址.系统默认为打开的,如:                (gdb) f        #0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")         …
在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: printprint /是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x. 一.表达式print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运行中的const常量.变量.函…
GDB(GNU Debugger)是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序 列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. GDB主要帮忙你完成下面四个方面的功能: (1).启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. (2).可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) (3).当…
程序运行发生异常退出,比如segment错误,此时可以利用系统生成的core文件,配合GDB来定位问题. 问题程序: segment.c #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> void func() { char *p = NULL; *p = ; } main() { func(); return; } gcc -g -o segment…
原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图 形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功 能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照…
tarjan算法的步骤是(当dfs到节点u时):1 在并查集中建立仅有u的集合,设置该集合的祖先为u1 对u的每个孩子v:   1.1 tarjan之   1.2 合并v到父节点u的集合,确保集合的祖先是u2 设置u为已遍历3 处理关于u的查询,若查询(u,v)中的v已遍历过,则LCA(u,v)=v所在的集合的祖先 不懂请点击 伪代码: Tarjan(u)//marge和find为并查集合并函数和查找函数 { for each(u,v) //访问所有u子节点v { Tarjan(v); //继续…
声明本文转自:http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html (查看内存部分有补充) 另推荐一个入门级的好文章:http://blog.csdn.net/liigo/article/details/582231 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是:printprint /是表达式,是你所调试的程序的语言…
乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v​\)使得两棵树中\((u,v)​\)距离的和最大.\(n \le 10^5​\). 点分治 例题二 题目大意:\(n\)个点的树,每个点有非负点权,求权值第\(k\)大的联通块.\(n,k \le 10^5\). 考虑点分治,对于每一个分治中心,进行的点分相当于多了一个"强制选该分治中心"的限制. 对于每一层的分治,我们dfs重标号,那么…
经典的GDB调试命令,包括查看变量,查看内存 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据.print命令的格式是: print print / 是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x. 一.表达式 print和许多GDB的命令一样,可以接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,既然是表达式,…
epoll(2) 源码分析 文本内核代码取自 5.0.18 版本,和上一篇文章中的版本不同是因为另一个电脑出了问题,但是总体差异不大. 引子留下的问题 关键数据结构 提供的系统调用 就绪事件相关逻辑 epoll 间的相互影响及处理 问题的解答 引子留下的问题 在上一篇文章中留下了几个问题,本文将针对这几个问题进行分析: epoll(2) 得到就绪事件的复杂度为何是 \(O(1)\) epoll(2) 和普通的文件相比的区别在哪里,比如和 eventfd(2) 比较 epoll(2) 相对 pol…
GDB是一个强大的命令行调试工具.虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本. UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是…
http://blog.csdn.net/haoel/article/category/9197 http://blog.csdn.net/haoel/article/details/2886  生成静态库:ar -rc ex.a ex0.o ex1.o exN.o ... 添加符号表:ar -s ex.a 删除成员:ar -d ex.a exN.o 显示内容:ar -tv ex.a GCC 编译器选项 -o 指定生成的文件的名称 -c 生成 object 文件,不链接 -S 只生成汇编文件 -…