数据结构
acInfinity
CS
展开
-
51nod 1461
原题链接 将桌腿按长度排序,枚举终态的最长桌腿长度L,假设该长度的桌腿有M条,显然长度大于L的桌腿必须去掉,剩下长度小于L的保留花费最大的M-1条即可。 用大根堆保存长度小于L的桌腿。 #include #include #include #include #include #include #include #include #include #include #include #def原创 2016-11-05 14:12:18 · 219 阅读 · 0 评论 -
HDU 5316
HDU 5316题意是给一个数列,有两种操作,一是询问[L,R]的最大子序列和,二是改变某个位置的值。单点修改,区间查询,很显然的线段树。关键在于,询问时的最大子序列要求相邻元素的在原序列中的位置奇偶性不同。 序列的奇偶性根据首位和末位的奇偶性最多就四种情况,奇奇,偶偶,奇偶,偶奇。 那么线段树中的每个节点保存这四种序列的最大和即可,并注意合并。 #include<bits/stdc++.h>原创 2017-03-07 14:48:58 · 406 阅读 · 0 评论 -
LA 4487
LA 4487题意是有n个数,Q个操作,你并不知道这n个数的具体值。操作有三种: 1)I p v,告诉你第p个数值为v 2)I p q v,告诉你第p个数和第q个数的异或值为v 3)Q k a1…ak,询问a1…ak这k个数的异或值 考虑并查集,par[x]保存x的父节点,v[x]保存x和par[x]的异或值。 I p q v时,合并p和q,并在寻根时路径压缩,更新父节点以及和父节点的异或原创 2017-03-12 22:33:18 · 418 阅读 · 0 评论 -
51nod 1624
题意:给定3*n的矩阵,求模P下的路径权值总和最大值。 每次移动都只能向右或者向下走,那么一条完整的路径必然是由 (1,1)->(1,L)->(2,L)->(2,R)->(3,R)->(3,n)。 先预处理出road[i],road[i]代表从(2,1)->(2,i)->(3,i)->(3,n)的路径权值总和和,并插入multiset。 再枚举L:1~n,每次对于L,计算sum[L]:(1,原创 2017-06-02 01:11:31 · 289 阅读 · 0 评论 -
51nod 1307
题意:给出一棵树,每条边上都有一个权值,每个点也有一个权值,当一条边的子树所有节点权值和超过这条边的权值时,这条边会断开。边按序给出,问最多能有几条边。 每条边的可承受重量可以看成其下端点的可承受重量。 数据比较弱,首先可以按题意模拟,当加入一个新点时,向上不断查找父节点,查看新点到根节点的这条路径是否有边会超限断开。#include<cstdio> #include<cstring> #inc原创 2017-07-05 23:57:18 · 245 阅读 · 0 评论 -
2017 ACM西安网络赛 G题 Xor
题意: 给出一棵树,每个节点有个val,q个询问。 询问格式:u, v, k, 从u到v的路径, 每个k个点取一个,求所有点的val值异或和。 如果没有隔k个取1个的限制的话,那么做法是很显然的,dfs一遍,求出所有点到根的异或和,ans=xor(u, root)^xor(v, root)^(lca(u, v),root)。 现在有步长的限制,取m=sqrt(n), 1)预处理出步长k<=原创 2017-09-18 21:16:38 · 674 阅读 · 0 评论 -
51nod 1490
51nod 1490多重游戏 其实从单个游戏来看,把所有串插到Trie树里,搜一遍,寻找必胜必败态,判先手必胜否,问题就解决了。 但题目要求进行K次游戏,那么每次游戏最优策略就不一定是求胜,因为胜者要让出先手权。 比如,A可以通过先手来实现前K-1次游戏的失败,在第K次游戏时获胜。 所以除了先手可胜搜索,还要进行先手可败搜索。#include<set> #include<map> #incl原创 2017-10-09 17:18:44 · 296 阅读 · 0 评论