- 博客(27)
- 收藏
- 关注
原创 POJ 1438 One-way Traffic
题意:与 http://blog.csdn.net/houserabbit/article/details/38958891 类似 只不是将原本的无向图变为混合图思路:在上一篇我也写过了 http://blog.csdn.net/houserabbit/article/details/38958891 首先是找桥 那么就需要先把混合图变成无向图 因为题目说答案存在 因此桥必然
2014-08-31 11:40:02 1143
原创 POJ 1515 Street Directions
题意:一幅无向图 将尽量多的无向边定向成有向边 使得图强连通 无向图保证是连通的且没有重边思路:桥必须是双向的 因此先求边双连通分量 并将桥保存在ans中每个双连通分量内的边一定都可以变成有向边(毕竟是圈组成的图) 边的定向方式分两种:1、对于树枝边u->v 如果low[v]>dfn[u]说明v回不到u上面去 所以ans应该是v->u的边 否则是u->v2、
2014-08-31 10:59:47 1373
原创 UVALive 4839 HDU 3686 Traffic Real Time Query System
题意:寻找图中从一条边到另一条边的路径上必须经过的点的个数思路:首先必经过的一定是割点 因此可以先做点双连通然后缩点 缩完点后形成了树 而且树上的路径是满足“非割点-割点-非割点-割点-…”这样的模式的 路径u->v只需要求出他们的lca 则答案可以通过(dis[u]+dis[v]-dis[lca]*2)/2算出注意:这题缩点是通过边来进行的 因为这样可以使每条边都
2014-08-30 13:56:28 1508
原创 UVA 11604 General Sultan
题意:给出一些0和1组成的串 问 是否存在一个串使得将这个串分解成之前给出的模式串有多种方案思路:首先画出一个下面的图那么我们可以发现 两种方案去拼接同一个串 总是会做模式串A的后缀和模式串B的前缀的匹配(绿色部分) 当然也会存在包含(紫色部分) 因此我们就将问题转化成 从两个模式串开始 不停的按照前缀后缀匹配 最后达到两个方案同时在一个点结束 这样的问题
2014-08-30 13:49:17 1470
原创 UVA 11294 POJ 3648 Wedding
题意:婚礼上新郎新娘坐在桌子两侧 新娘只能看见对面的人 已知一些人有XX关系… 新娘不想看见有关系的同时坐在对面 问 满足条件的情况下 新娘这边做的人是谁思路:新郎那一边的约束最多 有利于解题 那么就变成了 一个人要不要坐新郎这边的2-sat问题 因此可以先求新郎这边的人 然后反一下就是新娘这边的了 注意 新郎是必选点 而且 不能选和新郎有XX关系的…
2014-08-29 20:12:08 1192 2
原创 UVALive 3713 Astronauts
题意:有n个宇航员 他们需要完成A、B、C三种任务 年龄>=平均年龄的人可以做A和C 年龄思路:一类人有2种选择而且必须选1个 因此想到2-sat 根据年龄和讨厌关系来建边 之后先做可行性判断 确定可以后 求出任意一组可行解 不需要字典序最小代码:#include#include#include#includeusing namespace std;
2014-08-29 19:56:54 837
原创 UVALive 5135 HDU 3844 Mining Your Own Business
题意:一些隧道组成矿井 现在要修建尽量少的逃生通道 使得无论哪里发生事故 所有人均能逃出 求方案数思路:这道题比较容易联想到割点 因为只有这种点出事矿井才会不连通 那么首先就找出所有割点分析最少要建几个逃生通道 那当然是每个连通块各一个 因此需要把求出连通块顶点数之积最后考虑特殊情况 没有割点 那么随便两个地方建就好了 不能建一个 万一就那里出事了呢
2014-08-29 19:47:46 1078
原创 UVALive 4255 Guess
题意:给你半个矩阵 如果(i,j)的位置是'-' 则说明sum[i...j]0 如果是'0' 说明sum=0 给出一种满足这个矩阵的序列 序列元素绝对值在10以内思路:很容易想到的是将sum[i...j]转化为sum[j]-sum[i-1] 即用前缀和来表示 那么题中的矩阵就可以转化成前缀和之间的大小比较 也就是说 我们可以通过将前缀和当成点 将大小关系作为边
2014-08-29 19:36:57 1083
原创 UVA 10054 The Necklace
题意:项链散了 每个珠子前端后端分别有颜色 在项链中 相邻的珠子的相邻的那一端颜色相同 问 找到的珠子能不能重新串起一根项链思路:比较经典的欧拉回路题 Fleury算法解决问题代码:#include#include#includeusing namespace std;#define M 60int n,ans,top,m,t,T;int Edge[M
2014-08-29 19:26:11 933
原创 POJ 2793 Cactus
题意:给你一幅无向图 计算它有多少生成子图是仙人掌 如果它本身不是仙人掌输出0思路:无向图的仙人掌是一个连通图且一条边最多在一个环上对于这道题 需要区分“生成子图”和“导出子图”的概念生成子图:包含G的所有顶点V和其中一些边的子图导出子图:选择G中一些点组成集合V',将E中所有两端点在V'中的边全部找出形成的子图叫点导出子图;选择G中一些边组成集合E',将V中所有与E'中的边有关系的点全部找出形成的子图叫边导出子图。那么这道题就是说你要扔掉一些边 使图还是仙人掌 问方案
2014-08-27 18:27:12 1537
原创 HDU 3594 Cactus
题意:一幅有向图是不是仙人掌思路:有向图仙人掌是强连通图且每条边最多只属于一个环一幅有向图是仙人掌当且仅当满足3个条件:1、dfs树无横向边2、对于节点u的所有儿子v,它们的low[v]3、满足low[v]证明见 http://download.csdn.net/detail/kksleric/4502360代码:#include#include#i
2014-08-27 14:33:55 902
原创 Codeforces Round #262 (Div. 2) (460A 460B 460C 460D)
460A Vasya and Socks题意:n个物品每天用一个 m天得一个 问 最多连续用几天思路:没思路… 就是暴力…代码:#include#include#include#include#include#include#include#include#includeusing namespace std;int main(){
2014-08-26 15:59:10 1187
原创 2014多校联合十(HDU 4972 HDU 4973 HDU 4974 HDU 4975)
HDU 4972 A simple dynamic programming problem题意:篮球比赛有1、2、3分球 现给出两队的分差序列(5:3 分差2 3:5分差也是2) 问有多少种可能的比分思路:比较简单的想法题 可以类一张表“从分差x到分差y一共有几种情况” 很容易发现只有1->2和2->1的时候会多一种情况 其他均是一种 所以只需要统计这种特殊分差即可 注
2014-08-26 15:35:12 1070
原创 HDU 4967 Handling the Past
题意:你有一个栈 一些操作发生在栈上 包括进栈、出栈、询问栈顶 每个操作有一个独一无二的时间 当操作读进来时 要把之前处理的本该在本操作之后的操作全撤销 接着完成现在的操作 再把撤销的操作重做一遍 每次询问操作输出栈顶元素思路:由于时间唯一 那么可以用时间来对应插入的元素以及操作的类型 所以首先离散化时间(这里不去掉重复也行)然后我们把push当作+1 pop
2014-08-20 17:07:31 970
原创 HDU 4966 GGS-DDU
题意:你有n个课程 每个课程有一个规定的毕业学分 修学分有m种方式 每种方式要求先修到x课程x'学分以上才能花费money去修y课程并且将学分修到y' 问 最少花费多少可以毕业思路:一开始想费用流 建完图发现一个问题解决不掉 那就是 一条边如果流过多次怎样才能让费用只计算一次 所以换思路我们知道 为了应付“ 学分修到y' ”这个条件 高层学分一定要“覆盖”低层
2014-08-20 09:45:27 1164
原创 2014多校训练九(HDU 4960 HDU 4961 HDU 4965 HDU 4968 HDU 4969 HDU 4970)
HDU 4960 Another OCD Patient题意:给你一串数字 相邻x个数字合并成一个数字(相加)有一定代价 问 最少花费多少使得串变成回文串思路:读完题感觉像dp 数据范围也像 就开始想怎么表示状态 最简单的应该想到dp[i][j]表示i到j区间变成回文串的最小花费 状态想好了想做法 考虑将串分成AAAABBBBBBBCCC三段 即所有A合成一个数字
2014-08-19 20:06:13 2150 2
原创 2014多校联合八(HDU 4945 HDU 4946 HDU 4948 HDU 4950 HDU 4951 HDU 4952)
HDU 4945 2048题意:给你一堆数字 问有几个子集可以拼出2048思路:拼数字的规则相当于让数字乘二 所以不是2^i的数字不会拼出2048 那么这些数可选可不选 即为2^cnt种可能之后只要计算出有几个子集不可能拼出2048即可 不过简单的直接dp是2048*100000的复杂度的 会TLE所以要变成先枚举元素 再枚举该种元素个数 再枚举2048种状态
2014-08-18 18:49:38 1708 1
原创 2014多校联合七(HDU 4937 HDU 4938 HDU 4939 HDU 4941)
好几天没写题解了… 都怪我太弱 补题补不动…HDU 4937 Lucky Number题意:一个数字如果只有3456这四种数字组成 那么这个数字是幸运的 问 给出一个x 它在几种进制下是幸运的 如果无穷输出-1思路:分类讨论 如果x是3或4或5或6 那么一定有无穷个进制满足(从十进制开始…) 直接输出-1除去上述情况 那么我们可以将一个数字写成这样 a0 +
2014-08-18 17:00:35 3191
原创 HDU 4928 Series2
题意:0序列为 a1、a2、a3……an 根据运算规则ai=ai+1-ai计算i序列 如果序列单调则为合理序列 问从0开始到第几序列是合理的 如果一直合理就是nice 如果一开始就不合理就是ugly思路:照着题解做 - -b 负责度证明很是精妙 具体见官方题解这里有一点需要补充 就是压缩0的那个优化 压缩只能在串首和串尾进行 因为要保证答案不变还有不是每次压缩
2014-08-11 11:11:09 1255
原创 HDU 4921 Map
题意:给n个节点 他们形成了最多10条链 每条最多1000的长度 每个节点有个val 你可以选择任意位置截断链 断点前的所有节点被你获得 通过题中计算公式得出你的val 问 通过随机截断 获得val的期望是多少思路:期望=所有方案val的和/方案数这里明显有分层的现象 而且每层最多10个元素 因此想到状压 那么我们只要逐层统计 每层计算一下能对“所有方案v
2014-08-10 14:27:44 1241
原创 HDU 4916 Count on the path
题意:给定一棵树和m个询问 每个询问要求回答不在u和v两节点所形成的路径上的点的最小标号思路:一开始以为是LCA… 不过T了好几次… 后来发现不用LCA也可做考虑每个询问u和v 如果他们的lca不是1 则1一定是答案 不过求lca会T 那么我们只需要在遍历树的时候给节点染色 染的颜色就是1的儿子的颜色 如果x这个点在y的子树中(y是1的儿子)那么他的颜色就是y
2014-08-09 19:41:25 1607
原创 CodeForces 451D Count Good Substrings
题意:一个只包含a和b的字符串 问 它有几个长度为偶数和长度为奇数的“压缩回文串” 压缩的概念是 相邻的相同字符压缩成一个字符思路:串经过压缩一定满足如下形式 ……ababab…… 那么这样只要两端的字符相同则中间一定是回文的 因此对于一个a它作为左端点形成的回文串个数就等于它右边的a的个数 那么长度是奇数还是偶数呢 可以这么判断 如果a在奇数位置上和它匹配的a也在奇
2014-08-09 19:28:59 1016
原创 HDU 4917 Permutation
题意:一个序列p1、p2、p3……pn是由1、2、3……n这些数字组成的 现给出一些条件pi思路:很容易想到用一条有向的线连接所有的pi和pj 那么就构成了有向无环图(题中说有解所以无环)又因为pi各不相同 那么题目就变成了有向无环图的拓扑排序的种类数题目中边数较少 所以可能出现不连通情况 我们先讨论一个连通集合内拓扑排序的种类数题目中m较小 可以利用状
2014-08-08 10:05:00 1452
原创 2014多校联合六(HDU 4923 HDU 4925 HDU 4927 HDU 4930)
HDU 4923 Room and Moor题意:给出A序列 求满足题目所写的B序列 使得方差最小思路:可以想到最后的结果中 B序列的值一定是一段一段的 那么我们可以类似贪心去搞 对于一段序列我们可以求出什么样的b值使得方差最小 即序列中1的个数除以序列长度 又因为B是单调的 可以用一个单调栈去模拟 复杂度远远小于n^2 不要被吓怕…HDU 4925 Apple Tree题意:n*m的格子 要么种苹果 要么施化肥 施肥后的格子的相邻格子如果种了苹果 则苹果数翻倍 问最多
2014-08-07 19:45:37 1043
原创 HDU 4912 Paths on the tree
题目:给定一棵树和一些路径 问 最多能选出多少路径放在树上 使得各个路径间没有点交叉思路:LCA+贪心对于一条路径 我们可以将它分成两部分 即 从u到lca 和 从v到lca 易知lca位于树上深度最浅的地方 而且如果这个lca被一条路径覆盖了 那么下面的子树都相当于被覆盖了考虑到以x点为上述的lca点 那么如何选择经过x的路径呢 可以想到如果一条路
2014-08-06 14:04:22 1271
原创 HDU 4919 Exclusive or
题意:求题目中的式子 - -b思路:推递推公式 比赛时候队友就说数字上有关系 but没推出来 - -b 题解有过程:推的过程中最巧妙的就是利用异或的性质 相邻两个数字相当于修改二进制最后两位 不过这样做通过异或出来的结果是相同的题目中数字太大 用java比较好写 处理递推的问题常用记忆化搜索代码:import java.util.*;import
2014-08-06 11:15:27 1802
原创 2014多校联合五(HDU 4911 HDU 4915 HDU 4920)
HDU 4911 Inversion题意:n个数字 通过k次相邻交换 使得逆序对数最少思路:如果序列为 XXXABYYY 假设A和B位置互换 易知X和AB、Y和AB的逆序对数不变 换句话说一次交换最多使逆序对减少1 那么只需要求原逆序对数和k进行比较即可HDU 4915 Parenthese sequence题意:?可以代表(或) 那么输入的字符串能构造出几种合法的括号序列呢 输出无解、唯一解、多解思路:这题是我YY的… 首先我们可以计算出(和)应该填几个 如果计算出?不满足我
2014-08-05 19:32:08 1422
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人