07 2015 档案
摘要:题意:给定一个带权有向图,每次你可以选择一个结点v 和整数d ,把所有以v为终点的边权值减少d,把所有以v为起点的边权值增加d,最后要让所有的边权值为正,且尽量大。若无解,输出结果。若可无限大,输出结果。否则,输出最小边权的最大值。思路:差分约束系统用最短路来解。列式子后建图,新图的边就是原图的边,...
阅读全文
摘要:本文转自:http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y<=b不等式的约束,问是否有解! 神奇的是这类问题竟然可以转换成图论里的最短路
阅读全文
摘要:题意:判断一个字符串是否是一个合法的数字,包括正负浮点数和整形。思路:有限自动机可以做,画个图再写程序就可以解决啦,只是实现起来代码的长短而已。 下面取巧来解决,分情况讨论:(1)整数(2)浮点数(3)整数e整数(4)浮点数e整数 只有以上4种情况。但是要数之前可能带1个符号,这个可以直接过滤1...
阅读全文
摘要:题意: 给一个序列,要找一个等差或等比的连续子序列,求其最长的长度。思路: 扫两遍,判断等差或等比即可。从左往右扫,维护一个滑动窗口,考虑新加进来的数,如果满足了要求,则更新长度,否则只留最后两个数字,其他删掉,接着继续考虑下一个数字。等比也是如此,只是要注意精度的问题。 别人的代码: 1 #...
阅读全文
摘要:题意:beautiful数字定义为该数字中的十进制形式每一位都不同,给一个区间[L,R],求该区间中有多少个beautiful数字。思路:数字不大,直接暴力预处理,再统计区间[1,i]有多少个,用cnt[R]-cnt[L-1]即可。 1 #include 2 #define INF 0x7f7f7...
阅读全文
摘要:题意:有一个n*m的矩阵,每个格子中有一个数字,或为0,或为1。有个人要从(1,1)到达(n,m),要求所走过的格子中的数字按先后顺序串起来后,用二进制的判断大小方法,让这个数字最小。前缀0不需要输出!!思路:主要考虑的是BFS解决。 如果grid[1,1]=1,那么这个二进制的位数也就定下来了,...
阅读全文
摘要:题意:便利店老板为了促销,推出了组合包的形式,将不同数量的各类商品打包成一个组合。比如2袋薯片,1听可乐的组合只要5元,而1袋薯片,2听可乐的组合只要4元。通过询问老板知道:一共有N种不同的商品和M种不同的商品组合;每一个组合的价格等于组合内商品售价之和,一个组合内同一件商品不会超过10件。思路:高...
阅读全文
摘要:题意:给一个初始序列A[1,n],第j个数字代表精灵j的power值,有两种操作:(1)查询区间[L,R] (2)修改某个精灵的power值。 但,查询的是区间[L,R]中一个美丽子序列sub[l,r]的和,美丽子序列是从A[L,R]中挑出的一些数字,这些数字按升序排好序,每两个相邻数字(su...
阅读全文
摘要:题意:将指定的一段位置[m,n]的链表反置,返回链表头。思路:主要麻烦在链表头,如果要从链表头就开始,比较特殊。 目前用DFS实现,先找到m-1的位置,再找到n+1的位置,中间这段就是否要反置的,交给DFS解决,用个计数器来统计已经反置的个数即可。 1 /** 2 * Definition fo...
阅读全文
摘要:题意:给一棵二叉树,要求找出任意两个节点(也可以只是一个点)的最大路径和,至少1个节点,返回路径和。(点权有负的。)思路:DFS解决,返回值是,经过从某后代节点上来到当前节点且路径和最大的值。要注意如果子树传来的如果是负值,是可以同时丢弃的,但至少要将当前节点的val更新答案。 1 /** 2 *...
阅读全文
摘要:题意:给一棵树,每个结点的子树下的结点都是它的统治对象,问有多少个统治对象数目为k的结点?思路:每个结点都设一个cnt来记数,只要将每个结点往上回溯,直到树根,经过的每个结点都将计数器加1。最后再扫一遍,将cnt等于k的结点统计一下。#include #define LL long long#def...
阅读全文
摘要:题意: 一个画家画出一张,有3种颜色的笔,R、G、B。R看成'\',B看成'/',G看成这两种的重叠(即叉形)。给的是一个矩阵,矩阵中只有4种符号,除了3种颜色还有'.',代表没有涂色。问最小耗费多少笔即可画成这副图?思路: 最小耗费就是斜着的可以一笔搞定,但是如果中间隔着'.'或者其他一种形状...
阅读全文
摘要:题意:从1~1000,000的每个自然数质因子分解,不同因子的个数作为其f 值,比如12=2*2*3,则f(12)=2。将100万个数转成他们的f值后变成新的序列seq。接下来T个例子,每个例子一个询问区间seq[L,R]。问该子序列中任意两个不同下标的数,他们的GCD值最大为多少?思路:(1)质因...
阅读全文
摘要:题意:给一个单链表,每k个节点就将这k个节点反置,若节点数不是k的倍数,则后面不够k个的这一小段链表不必反置。思路:递归法。每次递归就将k个节点反置,将k个之后的链表头递归下去解决。利用原来的函数接口即可,不用重新定义。 1 /** 2 * Definition for singly-linked...
阅读全文
摘要:题意:给一个单链表,若其有环,返回环的开始处指针,若无环返回NULL。思路: (1)依然用两个指针的追赶来判断是否有环。在确定有环了之后,指针1跑的路程是指针2的一半,而且他们曾经跑过一段重叠的路(即1跑过,2也跑过),就是那段(环开始处,相遇处),那么指针2开始到环开始处的距离与head到指针相...
阅读全文
摘要:题意:给一个单链表,判断其是否出现环!思路:搞两个指针,每次,一个走两步,另一个走一步。若有环,他们会相遇,若无环,走两步的指针必定会先遇到NULL。 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * ...
阅读全文
摘要:题意: 给一个字符串,问:要补多少个字符才能让其出现循环?出现循环是指循环节与字符串长度不相等。比如abc要补多个变成abcabc。若已经循环,输出0。思路: 根据最小循环节的公式,当len%(len-next[len])==0时,最小循环节为len/(len-next[len]),而当len%...
阅读全文
摘要:题意: 定义a为一个字符串,a*a表示两个字符相连,即 an+1=a*an,也就是出现循环了。给定一个字符串,若将其表示成an,问n最大为多少?思路: 如果完全不循环,顶多就是类似于abc1这样,即n=1。但是如果循环出现了,比如abab,那就可以表示成(ab)2。还有一点,就是要使得n尽量大,...
阅读全文
摘要:题意: 给定一个n个点m条边的带权有向图,求平均权值最小的回路的平均权值?思路: 首先,图中得有环的存在才有解,其次再解决这个最小平均权值为多少。一般这种就是二分猜平均权值了,因为环在哪也难以找出来,还有可能是一条边属于多个环。对于每个猜到的平均值,如果对应环的存在,那么这个环的每条边的权减去这...
阅读全文
摘要:题意:给定一个序列,第i个元素代表第i天这支股票的价格,问在最佳时机买入和卖出能赚多少钱?只买一次,且仅1股,假设本钱无限。思路:要找一个最低价的时候买入,在最高价的时候卖出利润会最大。但是时间是不能冲突的,比如说在明天买入,今天卖出。因此,对于今天的价格,应该要找到今天之前的该股的最低价,买入,今...
阅读全文
摘要:题意:0代表水,1代表陆地,那么被水围起来的就是岛了,给一个01矩阵,问有多少个岛?思路:DFS还是比较短,实现了一下。如果一个点已经被遍历过了,那就将其置为0就行了,不要去搜0的。 1 class Solution { 2 public: 3 bool isok(vector >& gri...
阅读全文
摘要:题意:给一个用序列堆成的三角形,第n层的元素个数为n,从顶往下,每个元素可以选择与自己最近的两个下层元素往下走,类似一棵二叉树,求最短路。 [2], [3,4], [6,5,7], [4,1,8,3] 注意:这里可以2->3>5>1,也可以2->4>5->1,隔层相邻就可以走。...
阅读全文
摘要:题意:给一个单链表,将其每两个结点交换,只改尾指针,不改元素值。思路:迭代法和递归法都容易写,就写个递归的了。4ms 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 *...
阅读全文
摘要:题意:有一个有序序列A,其内部可能有部分被旋转了,比如A[1...n]被转成A[mid...n]+A[1...mid-1],如果被旋转,只有这种形式。问最小元素是?(假设没有重复元素)思路:如果是序没乱,直接返回A[1],如果乱了,二分查找还是可以的,O(1)可能就不行了。 二分要点:mid有可能...
阅读全文
摘要:题意: 一个序列的第n项为3*n*(n-1)+1,而 n>=1,现在给一个正整数m,问其最少由多少个序列中的数组成?思路: 首先,序列第1项是1,所以任何数都能构成了。但是最少应该是多少?对式子进行变形,6*(n*(n-1)/2)+1,看到了三角形数n*(n-1)/2,那么应该是6*(任意自然数...
阅读全文
摘要:题意:给一个电话号码,要求返回所有在手机上按键的组合,组合必须由键盘上号码的下方的字母组成。思路:尼玛,一直RE,题意都不说0和1怎么办。DP解决。 1 class Solution { 2 public: 3 vector ans; 4 string str; 5 6 v...
阅读全文
摘要:题意: Soda有一个n个点m条边的二分图, 他想要通过加边使得这张图变成一个边数最多的完全二分图. 于是他想要知道他最多能够新加多少条边. 注意重边是不允许的.思路: 先将二分图着色,将每个连通分量区分出左右两边的点,在着色过程中,顺便将每个连通分量两边的点数存起来,注意一个连通分量左右两边的...
阅读全文
摘要:题意:今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为n的字符串s. 他想要知道能否找到s的三个互不相交的子串s[l1..r1], s[l2..r2], s[l3..r3]满足下列条件: 1. 1≤l1≤r1 2 #include 3 #include 4 #includ...
阅读全文
摘要:题意:今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有m个纪念品.今天总共有n个参赛者, Soda想要知道最少需要花多少钱才可以给每个人都准备一个纪念品.思路:3种可能之一,要么不买...
阅读全文
摘要:题意:有一个包含n*m个格子的矩阵,其中有一个格子已经被染黑,现在要拿一些矩形来填充矩阵,不能填充到黑格子,但是每一个填充进去的矩形都必须至少有一条边紧贴在矩阵的边缘(4条边)的。用于填充的矩形其中最大面积的一个的面积大小为B,要使得B最小,如何填充?思路: 由于每个格子(除了...
阅读全文
摘要:题意: 给一个长为L的环,起点在12点钟位置,其他位置上有一些苹果,每次带着一个能装k个苹果的篮子从起点出发去摘苹果,要将全部苹果运到起点需要走多少米?思路: 无论哪处地方,只要苹果数超过k个,那么必须一次专程来运走!所以一开始可以先将他们mod k,去掉的部分先计算出来。 那么剩下的局面再来...
阅读全文
摘要:题意:给一棵树,求其先根遍历的结果。思路:(1)深搜法: 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * ...
阅读全文
摘要:题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可。现在如果要让p货物到达e,那么从起点出发最少要准备多少货物?输出答案和路径(多条路径则必须输出字典序最小的)。注:终点需要花费,而起点不需要。思路:这...
阅读全文
摘要:题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边。两个问题,第一问:求任意点对之间最短距离之和。第二问:必须删除一条边,再求第一问,使得结果变得更大。思路: 其实都是在求最短路的过程。 第一问可以floyd解决,也可以SSSP解决。注意是任意两个点,(a,b)和(b,a)是不同...
阅读全文
摘要:题意: 给一幅图,要从s点要到e点,图中有两种无向边分别在两个集合中,第一个集合是可以无限次使用的,第二个集合中的边只能挑1条。问如何使距离最短?输出路径,用了第二个集合中的哪条边,最短距离。思路:(1)简单易操作方法:既然第二个集合的边只能有1条,就穷举下这些边,可能的边集进行求最短路,同时记录...
阅读全文
摘要:题意:给一个size大于0的序列,求最大的连续子序列之积。(有正数,负数,0)思路:正确分析这三种数。0把不同的可能为答案的子序列给隔开了,所以其实可以以0为分隔线将他们拆成多个序列来进行求积,这样就没有0了。 接着是负数,负数如果遇到一个负数,可能反而比那个正数要大,所以正负数都要保存,遍历一次...
阅读全文
摘要:题意: 给定n个人,m对朋友关系,如果对于每个人,只能刚好选择其所有朋友中的一半的人进行聊天(只是我和我的朋友,不是我的朋友和我的朋友),那么有多少种情况?只要一个选择不同,视为不同情况。思路: 比如我在14个朋友中选择了7个跟我聊天,那么另外7人已经完全与我没干系,而和我聊天的7个朋友,也已经...
阅读全文
摘要:题意:给一个序列,其中只有1个元素只出现1次,其他的都一定出现3次。问这个出现一次的元素是多少?思路:(1)全部元素拆成二进制,那么每个位上的1的个数应该是3的倍数,如果不是3的倍数,则ans的这个位肯定为1。 22ms 1 class Solution { 2 public: 3 int...
阅读全文
摘要:题意: 有n5可以坐1号电梯10s,但是坐2号只需要5s,所以有重边。(2)k=0时,不耗时间。(3)有多种路径可达同一楼层且权值相同,那么从本楼层到另一楼层有多种选择,有时可以不换电梯,有时需要换。比如到达5楼的有2条路径,权都是5,但是是两部不同的电梯1和2,此时有其他电梯可以从5到7楼,其中...
阅读全文
摘要:c++的速度c的速度题意:将单链表重新编序为L0→Ln→L1→Ln-1→L2→Ln-2→… 。思路:先将链表后半段反置,变成2个链表,再递归将一个左链元素和一个右链元素合并。 1 /** 2 * Definition for singly-linked list. 3 * struct List...
阅读全文
摘要:题意: 给m个长度为n的模板串,模板串由0和1和*三种组成,且每串至多1个*,代表可0可1。模板串至多匹配2个串,即*号改成0和1,如果没有*号则只能匹配自己。问:模板串可以缩减为几个,同样可以匹配原来m个串同样能匹配的所有串。思路: 差点想不出是二分图匹配了。 将原来m个串所能匹配的串给取出...
阅读全文
摘要:题意: 给一棵n个节点的树,再给q个操作,初始集合S为空,每个操作要在一个集合S中删除或增加某些点,输出每次操作后:要使得集合中任意两点互可达所耗最小需要多少权值。(记住只能利用原来给的树边。给的树边已经有向。10万个点,10万个操作)思路:只能用 O(nlogn)的复杂度。官方题解: 重点...
阅读全文
摘要:题意:给一个无向图(连通的),张在第n个点,吴在第1个点,‘吴’只能通过最短路才能到达‘张’,两个问题:(1)张最少毁掉多少条边后,吴不可到达张(2)吴在张毁掉最多多少条边后仍能到达张。思路:注意是最短路才可达,但是最短路径可能有多条(即权值相等的)!! 第二个问题好回答,来次最短路,记录下到达每...
阅读全文
摘要:题意: 给一个整数序列,多达10万个,问:有多少个区间满足“区间最大元素与最小元素之差不超过k”。k是给定的.思路: 如果穷举,有O(n*n)复杂度。可以用ST算法先预处理每个区间最大和最小,O(nlogn)。再扫一遍整个序列,两个指针L,R用于这样判断:如果A[L,R]这个区间满足要求,则R+...
阅读全文
摘要:题意:给一个链表,实现插入排序。思路:O(1)空间,O(n*n)复杂度。将排好的用另一个链表头串起来,那个链表头最后删掉,再返回链表。 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int ...
阅读全文
摘要:题意: 给一个混合图,求判断是否有负环的存在,若有,输出YES,否则NO。有重边。思路: 这是spfa的功能范围。一个点入队列超过n次就是有负环了。因为是混合图,所以当你跑一次spfa时发现没有负环,但是负环仍可能存在,因为有向边! 但是单源最短路也有起点啊,难道穷举起点?不用,负环是必须有某...
阅读全文
摘要:题意:给一个无向图,求其点连通度?(注意输入问题)思路: 如果只有1个点,那么输出“1”; 如果有0条边,那么输出“0”; 其他情况:用最大流解决。下面讲如何建图: 图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通(即不存在从s到t的路径),求至少要删去几...
阅读全文
摘要:题意:给一个无向图,每条边上都有容量的限制,要求求出给定起点和终点的最大流。思路:每条无向边就得拆成2条,每条还得有反向边,所以共4条。源点汇点已经给出,所以不用建了。直接在图上跑最大流就可以了。 1 #include 2 #define LL long long 3 #define pii pa...
阅读全文
摘要:题意:一开始有一个集合,集合里有n个不同的数,然后Alice(娜娜)与Bob轮流进行操作,每人都可以任意选择两个数a,b,不妨设a>b,不过要求a-b不在集合中,把a-b放入集合(集合元素个数只增不减)。如果轮到某人,无法进行任何操作,则该人输掉游戏。当Alice(娜娜)与Bob都沿着最优策略进行,...
阅读全文
摘要:(同时也是HDU 2982,UVA的数据多)题意:平面上有m条有向线段连接了n个点。你从某个点出发顺着有向线段行走,给走过的每条线段涂一种不同的颜色,最后回到起点。你可以多次行走,给多个回路涂色(要么不涂色,要么就至少给一个回路上的边全部涂色)。可以重复经过一个点,但不能重复经过一条有向线段。如下图...
阅读全文
摘要:题意:一只母老鼠想要找到她的公老鼠玩具(cqww?),而玩具就丢在一个广阔的3维空间(其实可以想象成平面)上某个点,而母老鼠在另一个点,她可以直接走到达玩具的位置,但是耗时是所走过的欧几里得距离*10s。还有一种方法,就是靠钻洞,洞是球的,而在洞内怎么走都是不耗时间的。求母老鼠找到她的玩具所耗时?思...
阅读全文
摘要:题意:给一个序列,序列中只有1个是单个的,其他都是成对出现的。也就是序列中有奇数个元素。要求找出这个元素。思路:成对出现用异或最好了。两个同样的数一异或就变零,剩下的,就是那个落单的。 1 class Solution { 2 public: 3 int singleNumber(vecto...
阅读全文
摘要:题意:比如给你一个串,要求判断wyh是不是它的子序列,那么你只需要找一个w,找一个y,再找一个h,使得w在y前面,y在h前面即可。有一天小学生拿着一个串问他“wyh是不是这个串的子序列?”.但是wyh2000有重度近视眼,如果字符串中有一段连续的v(至少两个),那么他会把它看成一个w。例如,字符串v...
阅读全文
摘要:题意: 共有n个小学生,编号为1−n。将所有小学生分成2组,每组都至少有1个人。但是有些小学生之间并不认识,而且如果a不认识b,那么b也不认识a。Wyh2000希望每组中的小学生都互相认识。而且第一组的人要尽可能多。请你帮wyh2000求出第一组和第二组的人数是多少。如果找不到分组方案,则输出"P...
阅读全文
摘要:题意: 给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数。保证任意点对都可达。思路: 简单题。直接穷举每个点,进行BFS求该点到其他点的距离。累加后除去边数即可。 1 #include 2 #define LL long long 3 #defi...
阅读全文
摘要:题意: 给一个h*w的矩阵,每个格子中是'#'和'.'两个符号之一,分别代表草和洞。现在要将洞给围起来(将草和洞分离),每条边需花费b元(即将一个洞包起来需要4边,将2个连续的洞包起来需要6边,省了2条边)。有个特殊能力,能将洞变成草,花费f。当然也能将草变成洞,花费d。围起洞来需要多少花费。矩阵...
阅读全文
摘要:题意:给一个图,图中有部分是向边,部分是无向边,要求判断是否存在欧拉回路,若存在,输出路径。分析:欧拉回路的定义是,从某个点出发,每条边经过一次之后恰好回到出发点。 无向边同样只能走一次,只是不限制方向而已,那么这个情况下就不能拆边。不妨先按照所给的start和end的顺序,初步定下该无向边的顺序...
阅读全文
摘要:题意:给一个将要删除的位置的指针,要删除掉该元素。被删元素不会是链尾(不可能删得掉)。思路:将要找到前面的指针是不可能了,但是可以将后面的元素往前移1位,再删除最后一个元素。 1 /** 2 * Definition for singly-linked list. 3 * struct List...
阅读全文
摘要:题意:给一个序列,找出其中一个连续子序列,其和大于s但是所含元素最少。返回其长度。0代表整个序列之和均小于s。思路:O(n)的方法容易想。就是扫一遍,当子序列和大于s时就一直删减子序列前面的一个元素,直到小于s就停下,继续累加后面的。 1 class Solution { 2 public: 3 ...
阅读全文
摘要:题意:赛道有n个交叉点,和m条单向路径(有重边),每条路都是周期性关闭的,且通过仍需一段时间。在比赛开始时,所有道路刚好打开,选择进入该道路必须满足“在打开的时间段进入,在关闭之前出来”,即不可在路上逗留,但是可以在交叉点逗留。问到达终点的时间要多少?思路:最短路,而且正权,用Dijkstra+优先...
阅读全文
摘要:瑶瑶带你玩激光坦克Time Limit:2000/1000MS (Java/Others)Memory Limit:256000/128000KB (Java/Others)SubmitStatusProblem Description有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来达到...
阅读全文
摘要:小晴天老师系列——苹果大丰收Problem Description小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的。为了保存苹果,小晴天买了N个一模一样的箱子,想要把苹果放进去,允许有的箱子是空的,请问小晴天有多少种不同的放法呢?例如对于4...
阅读全文
摘要:小晴天老师系列——晴天的后花园Time Limit:10000/5000MS (Java/Others)Memory Limit:128000/64000KB (Java/Others)Problem Description小晴天非常漂亮的后花园,打算以后退休之后在里面种种花,养养草,所...
阅读全文
摘要:小晴天老师系列——竖式乘法Time Limit:4000/2000MS (Java/Others)Memory Limit:128000/64000KB (Java/Others)Problem Description小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一...
阅读全文
摘要:LCM ChallengeTime Limit:2000/1000MS (Java/Others)Memory Limit:128000/64000KB (Java/Others)SubmitStatusProblem DescriptionSome days ago, I lear...
阅读全文
摘要:题意:给一个序列nums,要求返回一个序列ans,两序列元素个数相同,ans第i个元素就是除了nums[i]之外所有的数相乘之积。思路:时间O(n),额外空间O(0)。 第一次扫一遍,处理nums[0~i-1]的积作为ans[i],这样的ans[i]就得到了i之前所有数之积,那么只剩下i后面所有数...
阅读全文
摘要:题意:实现trie树的3个功能,只含小写字母的串。思路:老实做即可! 1 class TrieNode { 2 public: 3 TrieNode* chd[26]; 4 bool flag; 5 // Initialize your data structure her...
阅读全文
摘要:题意: 一个有v个点的有向图,要从点1到点v需要找两条路径,两路径不可经过同一个点(除了1和v点)。求这两条路径的最小费用(保证有解)。分析: 难在建图,其他套模板。 此图给的是超级复杂图,两个点之间有多条有向边,方向还可能是相反的。用网络流来做不能仅靠2点流来保证,因为当只有3个点,4条边都...
阅读全文
摘要:题意: 给若干景点,每个景点有若干单向边到达其他景点,要求规划一下公交路线,使得每个景点有车可达,并且每个景点只能有1车经过1次,公车必须走环形回到出发点(出发点走2次)。问是否存在这样的线路?若存在就给出所有公交车需要走过的路的长度,要求长度尽量小。分析: 这超级难发现是网络流来做的。要将每个...
阅读全文
摘要:题意: 知道矩阵的前i行之和,和前j列之和(任意i和j都可以)。求这个矩阵。每个格子中的元素必须在1~20之间。矩阵大小上限20*20。思路: 这么也想不到用网络流解决,这个模型很不错。假设这个矩阵的每一行是水管,每一列是水管,每行有出水口流到每一列,这样想比较好理解。然后每行的流量和每列的流量...
阅读全文
摘要:题意: 给n个插座,m个设备(肯定要插电了),k种转换头可无限次使用(注意是单向的),问有多少设备最终是不能够插上插座的?分析: 看起来就是设备匹配插座,所以答案不超过m。这个题适合用网络流来解。 假设每种头对应着一个编号(可以用map实现转换string到int),主要在k种转换头的建边,他...
阅读全文
摘要:题意: 一个矩阵n*m,其中有k个房子和k个人,k个人分别必须走到任意一个房子中(匹配),但是权值就是长度(非欧拉距离),求匹配完的权之和。思路: 建图方法是,首先将k个人和k个房子分别抽出来到集合X和Y中,计算两两之间的距离,X到Y有一条边,费用为正,容量为1;Y到X也有一条边,费用为负,容量...
阅读全文
摘要:题意:给一个无向图,FJ要从1号点出发到达n号点,再返回到1号点,但是路一旦走过了就会销毁(即回去不能经过),每条路长度不同,那么完成这趟旅行要走多长的路?(注:会有重边,点号无序,无向图!)思路: 有重边,要用邻接表。所给的每条边都要变成4条有向边!否则可能一开始就到达不了终点了。最后要再加上一...
阅读全文
摘要:题意: 给两个水果名,要求他们的LCS部分只输出1次,其他照常输出,但是必须保持原来的顺序!思路: 求LCS是常规的,但是输出麻烦了,要先求LCS,再标记两串中的所有LCS字符,在遇到LCS字符时,先输串1的,再输串2的,然后输该字符,以保证每个LCS字符输出前,两串中该字符前面的字符全部已输出...
阅读全文
摘要:题意: 给n把枪,m个怪兽,每把枪可消灭1怪兽,并获得能量=枪的攻击力-怪兽的防御力。求如何射杀能获得最多能量?(不必杀光)思路: 用最大攻击力的枪杀防御力最小的怪兽明显可获得最大能量。如果每把枪都去射杀刚好1点能量都拿不到的怪物,那简直等于把枪全丢掉。 1 //#pragma comment(...
阅读全文
摘要:题意:新郎和新娘结婚,来了n-1对夫妻,这些夫妻包括新郎之间有通奸关系(包括男女,男男,女女),我们的目地是为了满足新娘,新娘对面不能坐着一对夫妻,也不能坐着有任何通奸关系的人,另外新郎一定要坐新娘对面。但是输出时输出坐在新娘这一边的人(不需要输出新娘)。分析: 问题只是要求不能 “通奸对”不能同...
阅读全文
摘要:题意:给个赤裸的最大流问题。 思路:EK+BFS解决。跟HDU1532几乎一样的。 1 #include <bits/stdc++.h> 2 #define LL long long 3 #define pii pair<int,int> 4 #define INF 0x7f7f7f7f 5 usi
阅读全文
摘要:题意: 给出一个有向图,以及边上的容量上限,求最大流。(有重边,要将容量上限叠加)思路: 用最简单的EK+BFS解决。每次搜到一条到达终点的路径,就立刻退出,更新ans,然后再回头修改图中的当前flow状况(这就得靠记录路径了)。当当前图没有到达终点的路径图,流已经饱和,可以结束程序了。 1 #...
阅读全文
摘要:适合已经对网络流有一点想法但不是很清楚的人看。所有图均盗用别人的。 只需要知道的概念: C[u][v]:从u到v这条边可以一次性通过的容量。 F[u][v]:从u到v这条边目前流过了多少的流量(即已经cut掉C[u][v]的多少了)。 下面可以开始看图了: 假设上图是已经知道的一些容量的使用状况,可
阅读全文
摘要:题意:给一个数列,再给一个数字p,要求p一定要替换掉数列中的一个元素,然后求最大连续子序列之和。思路:1000*1000的复杂度,O(n*n) 。就是每个都试,然后求和。 1 #include 2 #define LL long long 3 #define pii pair 4 #define ...
阅读全文
摘要:题意: 给两个链表,他们的后部分可能有公共点。请返回第一个公共节点的地址?若不重叠就返回null。思路: 用时间O(n)和空间O(1)的做法。此题数据弱有些弱。 方法(1)假设两个链表A和B,用两个指针分别按顺序遍历AB和BA,这AB和BA肯定等长的。如果他们有公共点,那么按照这样走必定会在某...
阅读全文
摘要:题意:给出杨辉三角的层数k,返回最后一层。k=0时就是只有一个数字1。思路:滚动数组计算前一半出来,返回时再复制另一半。简单但是每一句都挺长的。0ms的版本: 1 class Solution { 2 public: 3 vector getRow(int rowIndex) { 4 ...
阅读全文
摘要:题意: 给一棵二叉排序树,找p和q的LCA。思路: 给的是BST(无相同节点),那么每个节点肯定大于左子树中的最大,小于右子树种的最小。根据这个特性,找LCA就简单多了。 分三种情况: (1)p和q都在root左边,那么往root左子树递归。 (2)在右同理。 (3)一左一右的,那么ro...
阅读全文
摘要:题意:按层,将元素收集在一个二维数组中。思路:广搜应该是普遍的方法了。还能避免栈溢出,多好用。搭配deque,因为要经常删除。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val;...
阅读全文
摘要:题意:如题,平衡树是指任意一个节点(除了叶子),其左子树的高度与右子树的高度相差不超过1。思路:递归解决,但是提供的函数不满足递归的要求啊,我们至少得知道高度,又得返回真假,所以另开个函数解决。 1 /** 2 * Definition for a binary tree node. 3 * s...
阅读全文
摘要:题意:给一棵二叉树,求其深度。思路:递归比较简洁,先求左子树深度,再求右子树深度,比较其结果,返回:max_one+1。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 ...
阅读全文
摘要:题意:给个单链表,判断是否为回文。思路:有点BT,处理不好都是死循环。一般思路是,二分查找中心点,根据奇偶个元素,反置前半部分,再判断是否回文,再恢复前半部分。步骤: (1)在二分查找中心点时判断顺便反置前半部分链表。 (2)对奇偶数处理好剩下的工作。这是重点 (3)两个指针来判断是否回文。 ...
阅读全文
摘要:题意:判断1个数n是否刚好是2的幂,幂大于0。思路:注意会给负数,奇数。对于每个数判断31次即可。 1 class Solution { 2 public: 3 bool isPowerOfTwo(int n) { 4 if(n1) return false; 5 ...
阅读全文
摘要:题意:给出n个点,每个点上有一个数字可以0或1,然后给出m条限制,要求a和b两个点上的数字满足 a op b = c,op和c都是给定。问是否能够有一组解满足所有限制?(即点上的数字是0是1由你决定)思路:题意很清晰了,难点在建图。要考虑所有可能的冲突:当op为and: (1)c为0时,其中1个必...
阅读全文
摘要:题意: 有A,B,C三种任务,每个人必获得1个任务,大于等于平均年龄的可以选择A和C,小于平均年龄的可以选择B和C。这些人有一些是互相讨厌的,必须不能执行同任务,问能否安排他们工作?若行,输出任意一组解。思路: 依然是 2-SAT,只不过换了个样子,建图时不同而已。这里每个人依然有2人选择,也有...
阅读全文
摘要:题意: 有n个飞机要降落,每机都可以在两个时间点上选择降落。但是两机的降落时间间隔太小会影响安全性,所以,要求两机的降落时间应该达到最大,当然也不能冲突了。问最大的时间间隔是多少?(其实问的是max(每种方案中两机间的最小间隔) )思路: 二分穷举每个时间间隔,对于每个间隔,建反向图,对图进行D...
阅读全文
摘要:题意:给一个数字n,输出excel表的列名称。思路:其实观察可知道,是个26进制的标记而已。那就模拟一下,每次计算一位时就先左移1位,再进行计算。 1 class Solution { 2 public: 3 string convertToTitle(int n) { 4 ...
阅读全文
摘要:题意:如题思路:递归解决,同判断对称树的原理差不多。先保证当前两个结点是相等的,再递归保证两左结点是相等的,再递归保证右结点是相等的。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int ...
阅读全文
摘要:题意: 一些人要在同一天进行婚礼,但是牧师只有1个,每一对夫妻都有一个时间范围[s , e]可供牧师选择,且起码要m分钟才主持完毕,但是要么就在 s 就开始,要么就主持到刚好 e 结束。因为人数太多了,这些时间可能会重叠,可能还会完全包含,可能还没有交叉,各种情况。问牧师能否主持完全部人的婚礼,若...
阅读全文
摘要:题意: 有一个环,环上n个点,现在在m个点对之间连一条线,线可以往圆外面绕,也可以往里面绕,问是否必定会相交?思路: 根据所给的m条边可知,假设给的是a-b,那么a-b要么得绕环外,要么只能在环内,除非a和b是连续的点才不会影响到任何弧,否则一定会多少影响其他弧的走势。比如样例所举出的 0-2和...
阅读全文
摘要:题意:给一个有向图,要求找出一些点,使得这些点中的任意点对,要么可以互通,要么单向可达。思路:最低只要求单向可达即可,即a->b都可以算进去。 强连通分量内的点肯定是满足要求的,可以全选,但是有多个强连通分量时就不行了,得有取舍。老方法,先缩点,缩完点后是没有环的存在的,所以就是拓扑图了。如果只给...
阅读全文
摘要:和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short i
阅读全文
摘要:题意:给出个有序不重复数列(可能负数),用缩写法记录这个数列。思路:找每个范围的起始和结束即可。 1 class Solution { 2 public: 3 vector summaryRanges(vector& nums) { 4 if(nums.empty()) ...
阅读全文
摘要:题意:给出一个有向图(不一定连通),问最多可添加多少条边而该图仍然没有强连通。思路: 强连通分量必须先求出,每个强连通分量包含有几个点也需要知道,每个点只会属于1个强连通分量。 在使图不强连通的前提下,要添加尽可能多的边。边至多有n*(n-1)条,而已经给了m条,那么所能添加的边数不可能超过k=...
阅读全文
摘要:题意: 给一个有向图,问添加几条边可以使其强连通。思路: tarjan算法求强连通分量,然后缩点求各个强连通分量的出入度,答案是max(入度为0的缩点个数,出度为0的缩点个数)。 1 #include 2 #define LL long long 3 #define pii pair 4 us...
阅读全文
摘要:转自http://blog.csdn.net/jokes000/article/details/7521259 名词积累: 数据库(Database):存放和提供数据的“库房” 数据(Data):数据库中存储的基本对象。 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件。 数据库
阅读全文
摘要:题意: 判断所给的有向图是否是一个强连通图。思路: 如果连通分量大于1则必定No,如果强连通分量大于1也是No。tarjan算法求强连通分量。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #i...
阅读全文
摘要:关于如何求强连通分量的知识请戳https://www.byvoid.com/blog/scc-tarjan/ 1 void DFS(int x) 2 { 3 dfn[x]=lowlink[x]=++dfn_clock; 4 stac.push_back(x); 5 for(i...
阅读全文
摘要:题意: 给出一个连通图,要求将某些点涂黑,使得无论哪个点(包括相关的边)撤掉后能够成功使得剩下的所有点能够到达任意一个涂黑的点,颜料不多,涂黑的点越少越好,并输出要涂几个点和有多少种涂法。思路: 要使得任意撤掉一个点都能使其他点能够到达黑点,那么点双连通分量能保证这点,那么就在同个点双连通分量内...
阅读全文
摘要:题意:多个骑士要开会,3人及以上才能凑一桌,其中部分人已经互相讨厌,肯定不坐在同一桌的相邻位置,而且一桌只能奇数个人才能开台。给出多个人的互相讨厌图,要求多少人开不成会(注:会议不要求同时进行,一个人开多个会不冲突)?分析: 给的是互相讨厌的图,那么转成互相喜欢的吧,扫一遍,如果不互相讨厌就认为互...
阅读全文
摘要:题意:如标题思路:其他文章已经写过,参考其他。1 class Solution {2 public:3 int trailingZeroes(int n) {4 return n/5<5? n/5: n/5+trailingZeroes(n/5);5 }6 };AC代...
阅读全文
摘要:题意:有n个bug,有m个补丁,每个补丁有一定的要求(比如某个bug必须存在,某个必须不存在,某些无所谓等等),打完出来后bug还可能变多了呢。但是打补丁是需要时间的,每个补丁耗时不同,那么问题来了:要打多久才能无bug?(同1补丁可重复打)分析: n 2 #define LL long lon...
阅读全文
摘要:题意: 要使n个点之间能够互通,要使两点直接互通需要耗费它们之间的欧几里得距离的平方大小的花费,这说明每两个点都可以使其互通。接着有q个套餐可以选,一旦选了这些套餐,他们所包含的点自动就连起来了,所需要做的就是连上还未通的即可,q 2 #define LL long long 3 usin...
阅读全文
摘要:题意: 将单恋表反转。思路: 两种方法:迭代和递归。 递归 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ...
阅读全文
摘要:题意: 如果所给序列的元素不是唯一的,则返回true,否则false。思路: 哈希map解决。 1 class Solution { 2 public: 3 bool containsDuplicate(vector& nums) { 4 unordered_map ma...
阅读全文
摘要:题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小。简单图,不一定连通,权值可能全相同。思路:点数量不大。根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小。但是生成树有多棵,苗条度自然也有多个,穷举下所有生成树,就知道了结果了。根据“只要起始边不同,生成树必定不同”来穷举起...
阅读全文
摘要:(1)求割点和桥的方法是tarjan算法,刘汝佳训练指南p314。 【割点】可以将两个【点双连通分量】隔开来,因为仅一个【点双连通分量】中肯定无割点,那么每两个点对都同时处于若干个简单环中才能当一个点撤掉仍然可以互通。 【桥】可以将两个【边双连通分量】隔开来,因为仅仅一个【边双连通分量】中肯定无...
阅读全文
摘要:题意:给一个无向图,问需要补多少条边才可以让整个图变成【边双连通图】,即任意两个点对之间的一条路径全垮掉,这两个点对仍可以通过其他路径而互通。思路:POJ 3352的升级版,听说这个图会给重边。先看3352的题解http://www.cnblogs.com/xcw0754/p/4619594.htm...
阅读全文
摘要:题意:如果有两个相同的元素,它们之间的距离不超过k,那么返回true,否则false。思路:用map记录每个出现过的最近的位置,扫一边序列即可。扫到一个元素就判断它在前面什么地方出现过。本题数据有点弱。 1 class Solution { 2 public: 3 bool contains...
阅读全文
摘要:题意:从左到右统计将同一层的值放在同一个容器vector中,要求上下颠倒,左右不颠倒。思路:广搜逐层添加进来,最后再反转。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5...
阅读全文
摘要:思路:递归解决,在返回root前保证该点的两个孩子已经互换了。注意可能给一个Null。C++ 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNod...
阅读全文
摘要:题解转自http://blog.csdn.net/lyy289065406/article/details/6762370 文中部分思路或定义模糊,重写的红色部分为修改过的。大致题意: 某个企业想把一个热带天堂岛变成旅游胜地,岛上有N个旅游景点,保证任意2个旅游景点之间有路径连通的(可间接连通)...
阅读全文
摘要:题意: 给一个图n个点m条边(不一定连通),接下来又q个询问,询问两个点是为“不相连”,“仅有一条路径可达”,“有两条及以上的不同路径可达”三种情况中的哪一种。注:两条以上的路径指的是路径上的点连1个点也不重复。思路:并查集+tarjan求割点。 (1)情况一:先并查集处理,如果两个点从一开始就...
阅读全文
摘要:先看如下的两个定义: 点-双连通图:一个连通的无向图内部没有割点,那么该图是点-双连通图。 注意:孤立点,以及两点一边这两种图都是点-双连通的,因为它们都是内部无割点。 边-双连通图:一个连通的无向图内部没有桥,那么该图就是边-双连通图。 注意:孤立点是边-双连通的,但是两点一边不是边-双连通的。
阅读全文
摘要:题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量。思路:很多种情况。(1)如果给的图已经不是连通图,直接“ No SPF nodes”。(2)求所有割点应该不难,就是tarjan发明的算法搞定。但是求连通分量就得小心了,多种情况。看下: 1)如果一个割点x,其所有孩...
阅读全文
摘要:题意: 有一堆的学生关系,要将他们先分成两个组,同组的人都不互不认识,如果不能分2组,输出No。若能,则继续。在两组中挑两个认识的人(每组各1人)到一个双人房。输出需要多少个双人房?思路: 先判定是否为二分图,可以用黑白着色法(DFS或BFS都行)。若是二分图,再进行匹配,用匈牙利算法,注:给的...
阅读全文

浙公网安备 33010602011771号