dfs
deepquiet
这个作者很懒,什么都没留下…
展开
-
Network
题意:n台机器连成一个树状网络,其中叶节点是客户端,其他结点是服务器。目前有一台服务器正在提供VOD服务,虽然视频本身质量不错,但对于那些离它很远的客户端来说,网络延迟却难以忍受。你的任务是在一些其他服务器上也安装同样的服务,使得每台客户端到最近服务器的距离不超过一个给定的整数k。为了节约成本,安装服务的服务器台数应尽量少。思路:第一次遍历这个树,将距离VOD超过k的叶结点存入变长数组原创 2016-02-04 23:51:03 · 351 阅读 · 0 评论 -
uva301
题意:给出陈容纳量,车站数,订单数,求最大盈利思路:主要是贴一个超时的写法,现在还向不明白为什么超时注视掉的是超时写法代码:#include#include#include#includeusing namespace std;struct order { int bs, ds, num; int v;}ord[25];int vis[25];int原创 2016-05-16 17:27:44 · 267 阅读 · 0 评论 -
la3523+la5135
题意:la3523:骑士之间存在两两厌恶,不可为邻(围着圆桌坐),现求有几种其数个组合方式思路:就是求奇数圈.那么就是求点双连通分量代码:#include#include#include#include#include#includeusing namespace std;const int maxn = 1005;const int maxx = 1000原创 2016-08-03 14:43:35 · 369 阅读 · 0 评论 -
la4287(有向图的强连通分量和DAG)
题意:给出推到关系,那么问还要几步才能推出所有命题等价思路:命题等价就是双连通,所以我们就先求得一共有几个连通分量,然后把每个连通分量看成一个点,就形成了DAG,那么这个DAG需要几条边才能形成强连通的算法是强连通分量数-(出度与入度的最大值)代码:#include#include#include#include#include#includeusing nam原创 2016-08-03 20:49:13 · 431 阅读 · 0 评论 -
uvalive3211+uvalive3713
题意:两题2-sat问题,解法是一样的思路:先贴一下2-sat问题的统一解法和自己的理解代码:int init() { for(int i=0; i<n*2; i++) g[i].clear(); memset(mark, 0, sizeof(mark)); memset(s, 0, sizeof(s));}void add(int x, int a, int y,原创 2016-08-04 16:13:48 · 210 阅读 · 0 评论 -
uva11090
题目大意:就最小的环的平均权值思路:二分法枚举最小平均权值,如果有满足的环就return true这里用到了dfs找还,每次都减去平均权值,如果距离是>0的证明列举的平均权值是可以的当然这用到的vis是为了让循环停止代码:#include#include#include#include#includeusing namespace std;const int原创 2016-08-05 11:01:54 · 418 阅读 · 0 评论 -
uva620
题意:一个细胞有三种分裂状态,如果最后形成的新细胞不是由两种的正确的分裂方式形成的,就是变异。给出一个字符串判断是什么分裂状态(四种)。#include#include#include#include#includeusing namespace std;char s[1005];int dfs(int l, int r) { if(r-l>=2 && s[l]==原创 2017-03-22 19:25:26 · 200 阅读 · 0 评论 -
uva572
题目:多组案例,每组案例输入一个m行n列的字符矩阵,统计字符‘@’组成多少个连通块。如果两个字符‘@’所在的格子相邻(横、竖或对角线),则说明它们属于同一连通块。代码:#include#include#include#include#includeusing namespace std;const int maxn = 105;char g[maxn][maxn];in原创 2017-03-23 13:40:36 · 427 阅读 · 0 评论 -
uva657
题意:给一张有很多个(至少一个)骰子的图片,判断骰子上的点数。这张图片有三种像素组成,分别是 ' . '表示背景, ' * '表示骰子, ' X '骰子中的点;两个像素共用一条边表示连接,而共用一角却不表示连接。这道题的关键是在判断完是'X'后要立马接着往下判断是否有'*',应为要一条路搜到底,否则可能有遗漏#include#include#include#include#incl原创 2017-03-23 16:41:58 · 193 阅读 · 0 评论 -
文章标题
uvs784原创 2017-03-23 16:49:08 · 144 阅读 · 0 评论 -
uva10557
题意:初始值为100,给出每个房间的能量值,求能否在能量值为正的情况下从1走到n思路:floyd和dfs,这道题用了两种剪枝,一个是到当前房间能量值控制在最优,否则不再进入这个房间,一个是用floyd判断当前点是否可达终点还有一个重要的剪枝就是出现正环则为可以此题还可以用bfs做,由于BFS不会出现死循环,所以实际上是可以不考虑回环问题的,但是bfs比dfs要耗时的多,用到队列原创 2016-05-16 15:40:56 · 419 阅读 · 0 评论 -
uva572
代码:bfs:#include#include#include#include#includeusing namespace std;int dir[8][2] = {{-1,0},{-1,1},{0,1},{1,1}, { 1,0},{1,-1},{0,-1},{-1,-1}}; int g[105][105], vis[105][原创 2016-05-15 20:22:53 · 304 阅读 · 0 评论 -
uvalive3667 ruler
tips:回溯use a queue to restore the temporary marked array(vis) , and when it back, set vis = 0first floor give out all the received res, and combine with all the d to make new res, and mark all l原创 2016-03-15 20:24:57 · 303 阅读 · 0 评论 -
Power Calculus
题意:给出次数n,求至少要乘除几次可达到n次思路:首先初始化出最少步数,即累乘得到一个>=n的次数(如果为n那么就是结果,如果>n那么至少还需要除操作)然后用一个数组存储已经得到的次方数用于使用,同时操作乘与除,用dfs考虑所有的情况,直到base足够大,能得到cur==n代码:#include#include#include#includeusing name原创 2016-03-09 19:48:40 · 561 阅读 · 0 评论 -
Equipment uva1508
题意:给出n个5元组,求出其中k组,使得,每个数字最大的数的和最大值首先分情况讨论:这里主要是用了一个技巧:即用二进制来表示每个位子是否采用的情况,然后记录每个情况的最大值,最后组合最大值得到最优结果如果k>=5,那么显然最大值就是每个位子上的最大值相加如果不是,那么考虑所有串的所有情况的最大值,用一个数组记录每个情况的最大值,(实际上是不用担心串重复的),代码:原创 2016-03-09 20:08:51 · 334 阅读 · 0 评论 -
uva10614
题意:给*的位置涂色,保证不同行不同列的涂色不同思路:关键思路我已经标在代码上了一共要涂k种颜色,那么就要选出k条完全匹配的路(这样理解, 一旦这个点的横纵坐标相连,那么这两座标将不再参与匹配,即不能有相同行相同列的点)代码:#include#include#include#include#includeusing namespace std;#define r原创 2016-04-04 00:22:36 · 257 阅读 · 0 评论 -
Antimatter Ray Clearcutting uva11008
题意:给出n棵树的位置以及要消灭的树的数量m,同一直线上的树可一枪消灭,求最少枪支数思路:记忆化搜索,将树是否存在用二进制表示,一开始则是(1然后枚举所有的树,与当前的状态st相与判断树是否消灭,然后枚举其后的数,再枚举可能与之前枚举的两棵在同一直线上的树,如果在直线上,则可消灭最后取当前花费枪支的最小值技巧携带还需消灭的树会简化代码代码:#include原创 2016-02-26 16:44:55 · 268 阅读 · 0 评论 -
UVALive - 4614 Moving to Nuremberg (树形DP)
题意:找出一个点,使得从这个点出发经过规定点规定次数路径总和最短思路:首先先建树,设1为根,并计算从1出发的总路径那么从父结点递推下去算其字节点有:dp[v] = dp[u]+(sum-f[v])*len*2-f[v]*len*2 式子的意思就是v以上的点(-f[v])要多走u->v, 然后呢由于dp[u]里面含有v以下的点v->u的路径,所以减去代码:#include原创 2016-04-06 18:35:36 · 188 阅读 · 0 评论 -
uvaliva3403 Mobile Computing
code:use vector to save every situation's combination, and the length of the left and the right of it(total length, in other word, l1+l2is the final length of used stone)when there is one stone, k原创 2016-03-14 15:00:46 · 283 阅读 · 0 评论 -
uva208
题意:从1出发,到达给的点有几种走法所有的走法显然是需要回朔来求的,为避免超时,我们要剪枝那么最重要的就是用到的flo,这个方法可以判断通路(即当前点i是否可达终点),如果不可达就剪枝那么没达到终点,我们就把路径输出,路径存于一个数组中代码:#include#include#includeusing namespace std;const int mmax = 0x原创 2016-05-12 19:42:16 · 490 阅读 · 0 评论 -
uva10344
题意:给出5个值,求按顺序+-*是否能得到23思路:全排列之前必须排序,不然会wa代码:#include#include#include#includeusing namespace std;int flag;int arr[5];void dfs(int sum, int i) { if(sum == 23 && i==5) { flag = 1;原创 2016-05-12 20:19:11 · 190 阅读 · 0 评论 -
uva705
用斜线和反斜杠来填写一个矩形,您可以生成漂亮的小迷宫。这里有一个例子:如上图,可以组成一个迷宫,斜线和反斜杠相当于是迷宫的墙,路径在迷宫中不能分支, 所以整个迷宫只包含循环路径封闭(无法走出迷宫),还有的路径是通向迷宫外面的。你的任务是写一个程序, 计算出所形成的迷宫有多少个封闭路径(循环路径),以及计算出其中最长的封闭路径有多长。代码:原创 2017-03-23 17:52:57 · 296 阅读 · 0 评论