数据结构
菜鸟起航
这个作者很懒,什么都没留下…
展开
-
hdu 1022 Train Problem I
栈的简单题 #include #include using namespace std; int main() { stackQ; int i,n,a[200],j,num; char ch1[200],ch2[200]; while(scanf("%d",&n)!=-1) { memset(a,-1,sizeof(a)); scanf("%s%s",ch1,ch2原创 2013-04-17 20:53:37 · 462 阅读 · 0 评论 -
hdu 3804(树链剖分+线段树)
题意:给出一棵树,Q个询问x,w,x到1的路径上不超过w的最长边是多少。 思路:题目读完了就知道用熟练剖分处理,然后可以用线段树求,线段树学的不是很好,就问了lyf怎么处理数据,他说把所有的询问按照权值的大小排序,边的大小也按权值排序,然后对每个询问把小于等于该权值的边加到树上就可以了。 #pragma comment(linker, "/S原创 2013-10-25 18:30:11 · 1025 阅读 · 0 评论 -
poj 3237(树链剖分+线段树)
题意:给一棵树,三种操作。将第i条边的权值改为v,将a到b的路径上的边的权值全部取反,求a到b路径上边的权值的最大值。 思路:明显的树链剖分,加上线段树的操作。因为有取反的操作所以每个区间要记录最大值和最小值。查询两点间的路径时,用求公共祖先的方式去求。 #include #include #include const int N=101000; const原创 2013-10-13 19:27:45 · 1005 阅读 · 0 评论 -
hdu 3966 (树链剖分+线段树)
题意:给出一棵树,每个节点有一些敌人,有三种操作,I:x,y,路径上的所有点的人数+w。D:x,y,路径上的所有点的人数-w。Q:节点x的人数。 思路:如果是线性的线段树可以做,所以要树链剖分,剖分后的每条链是线性的,更改区间时用找公共祖先的方式,将两点找到同一条链上,同一条链上的两点间可以直接线段树更改。 #pragma comment(linke原创 2013-10-09 16:09:01 · 1544 阅读 · 2 评论 -
hud 4718 The LCIS on the Tree(树链剖分+线段树区间合并)
题意:给出一棵树,有Q个询问,x到y之间的路径所有边组成的序列,求该序列的LCIS。 思路:hdu 3308的加强版。先进行树链剖分,树链剖分后建线段树,树链剖分后一条链上的点在线段树中编号是连续的,所以只能在线段树上查询一条链上的区间信息,所给的点肯定不全是在一条链上的,所以我们求出的是一些区间,而这些区间还要合并起来求最大LCIS,在树上操作的时候是从度数大的点向上求的,有一条路径求的是下降原创 2013-10-09 12:07:34 · 1352 阅读 · 0 评论