![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图
deepquiet
这个作者很懒,什么都没留下…
展开
-
uva10397 Connect the Campus
题意:最小生成树,有的边已经不用考虑:代码:#include #include #include #define N 760 double w[N][N],x[N],y[N],key[N]; int pre[N], hash[N], n, m; inline double getDist(double x1,double y1,double x2,double原创 2016-03-11 14:32:06 · 249 阅读 · 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 · 375 阅读 · 0 评论 -
la4287(有向图的强连通分量和DAG)
题意:给出推到关系,那么问还要几步才能推出所有命题等价思路:命题等价就是双连通,所以我们就先求得一共有几个连通分量,然后把每个连通分量看成一个点,就形成了DAG,那么这个DAG需要几条边才能形成强连通的算法是强连通分量数-(出度与入度的最大值)代码:#include#include#include#include#include#includeusing nam原创 2016-08-03 20:49:13 · 435 阅读 · 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 · 215 阅读 · 0 评论 -
uva11324
题意:给出一张图,求最庞大的点之间至少单向可达的集合的点的数量思路:想求出全部的SCC,然后在把所有的SCC当成一个点,将所有不再一个SCC里但有关联的点连起来构成DAG,dp求最大值代码:#include#include#include#include#include#includeusing namespace std;const int maxn = 100原创 2016-08-04 22:18:46 · 275 阅读 · 0 评论 -
uva11090
题目大意:就最小的环的平均权值思路:二分法枚举最小平均权值,如果有满足的环就return true这里用到了dfs找还,每次都减去平均权值,如果距离是>0的证明列举的平均权值是可以的当然这用到的vis是为了让循环停止代码:#include#include#include#include#includeusing namespace std;const int原创 2016-08-05 11:01:54 · 424 阅读 · 0 评论 -
uva11478
题意:题目要求求得一个最大的最小权值,任意选择一个点,以这个点为终点的边减去一个数d,以这个点为起点的边江上d,那么对于一个点,可总和与该点的操作为d[a],二分枚举最小的权值x.假设边为a->b,那么对于a->b的边就有x那么把w[a,b]-x当成整体的化形式就很熟悉了,这是一个差数约分系统,只要没有负环就是有解那么要判断是不是无穷大只要最小权值是原先的最大值即可,判断是不是无解只要原创 2016-08-05 14:57:25 · 333 阅读 · 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 · 433 阅读 · 0 评论 -
uva657
题意:给一张有很多个(至少一个)骰子的图片,判断骰子上的点数。这张图片有三种像素组成,分别是 ' . '表示背景, ' * '表示骰子, ' X '骰子中的点;两个像素共用一条边表示连接,而共用一角却不表示连接。这道题的关键是在判断完是'X'后要立马接着往下判断是否有'*',应为要一条路搜到底,否则可能有遗漏#include#include#include#include#incl原创 2017-03-23 16:41:58 · 196 阅读 · 0 评论 -
文章标题
uvs784原创 2017-03-23 16:49:08 · 145 阅读 · 0 评论 -
uva705
用斜线和反斜杠来填写一个矩形,您可以生成漂亮的小迷宫。这里有一个例子:如上图,可以组成一个迷宫,斜线和反斜杠相当于是迷宫的墙,路径在迷宫中不能分支, 所以整个迷宫只包含循环路径封闭(无法走出迷宫),还有的路径是通向迷宫外面的。你的任务是写一个程序, 计算出所形成的迷宫有多少个封闭路径(循环路径),以及计算出其中最长的封闭路径有多长。代码:原创 2017-03-23 17:52:57 · 300 阅读 · 0 评论 -
uva439
题目意思:有一个8x8的棋盘,初始给定两个位置,求出从第一个位置到第二个位置的最短路最短路一般用bfs判断可达用bfs或者dfs都可以那么bfs的逻辑是这样的,就是说第一个到达终点的就是最短的,为什么呢,假如说在这之后还会有达到终点的点,不是和这个点同层(就是说和到达这个点的bushu)代码:原创 2017-03-23 20:07:53 · 775 阅读 · 0 评论 -
uva532
题意:三维空间,从s走到e,遇到#不能走,求最短路径。最短路劲用BFS代码:#include#include#includeusing namespace std;const int maxn = 30+5;int L,R,C;struct state { int x, y, z; state(int a, int b, int c) { x = a;原创 2017-03-25 10:46:13 · 261 阅读 · 0 评论 -
Audiophobia uva10048
题意:从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。思路:folyed, 枚举的第一层为中间的点体现了dp的无后效性这是最大值最小的问题,所以在路径上只要存储沿路中的最大值就好代码:#include#include#includeusing namespace std;int flo[105][105原创 2016-03-11 14:40:07 · 253 阅读 · 0 评论 -
uva567
题意:求两点之间的最短距离,floyd模板代码:#include#include#include#includeusing namespace std;int mmap[25][25]; void flo() { for(int i=1; i<=20; i++) for(int j=1; j<=20; j++) for(int z=1; z<=20; z++)原创 2016-07-20 11:18:18 · 275 阅读 · 0 评论 -
uva10269
题意:1-n是村庄,n+1-m+1是城堡,要从1-n+m,问最短时间思路:首先要为使用魔法做准备,这就需要求得沿路不经过城堡的所有路径(保证在最短状态),这就用到了floyd,然后是用spfa求用到魔法的最小时间f[i][j]表示剩余i次到达j用时如果不使用魔法能的到更短时间就不使用魔法如果使用了魔法,那么首先路径必须代码:#include#include#in原创 2016-07-27 18:57:41 · 263 阅读 · 0 评论 -
uva10099
题意:有一个旅游团现在去出游玩,现在有n个城市,m条路。由于每一条路上面规定了最多能够通过的人数,现在想问这个旅游团人数已知的情况下最少需要运送几趟思路:求全局沿路权值最大,并记录最大权值这条路上的最小权值,用floyd代码:#include#include#includeusing namespace std;const int N = 105;int n,原创 2016-03-11 14:47:27 · 200 阅读 · 0 评论 -
uva10801
题意:(非原创)有一层不超过100层的大楼, 有n个电梯,它们的速度都不同。 而且每个电梯只能到达指定的那些楼层,而且它们都有各自的速度(即上升一层或下降一层所用的时间)。 如果一个人在某层走出电梯,要换一个电梯乘,那么他要等60秒(不管要等的是那个电梯,即使是刚刚出来的那个电梯也要等60秒)。在0层搭电梯出发时不需要等待。一个人从0层开始,目的地是k层, 现在要搭这些电梯,问最少需多原创 2016-03-12 13:51:33 · 459 阅读 · 0 评论 -
uva10986 优先队列优化的Dijkstra
题意:求最短路思路:这里用到了邻接表来存储,由于n太大了,然后还用了优先队列来优化,每次都输出里面的最短边,如果这个点的最短边已经考虑过了自然就不会考虑,然后每纳入一个点(就是优先队列里出来的未考虑的点)就重新调整每个点到原点的距离, 所有调整过的点都重新入队代码:#include#include#include#includeusing std::make_pair;原创 2016-03-12 14:56:03 · 336 阅读 · 0 评论 -
uva10801
题意:给出每个电梯每层用时以及可到达的楼,每换一个电梯就要加60s思路:本题用到floyd,权值要自己算出来(add函数)代码:#include#include#include#include#includeusing namespace std;const int maxn = 105;const int inf = 10005;int n, k, t[max原创 2016-07-22 15:18:49 · 480 阅读 · 0 评论 -
uva10034
题意:最小生成树思路:kruskal代码:#include#include#include#include#include using namespace std;const int N = 105;double x[N], y[N];struct edge { double x, y, d;}e[N*N];int f[N];double ans;double原创 2016-07-22 15:21:10 · 238 阅读 · 0 评论 -
uva10099+uvauva10048
题意:一个求最小的最大值,一个求最大的最小值,思路一样思路:floyd代码:uva10048:#include#include#include#includeusing namespace std;int c, s, q;const int inf = 0x3f3f3f3f;int mmap[105][105];void floyd() { for(int i=1原创 2016-07-22 15:26:43 · 288 阅读 · 0 评论 -
uva10803
题意:求给的点之间任意连点之间的最远距离,直接相邻的点的距离如果超过10视为不可达思路:就是floyd代码:#include#include#include#include#includeusing namespace std;const int maxn = 1200;const double inf = 10000000000.0; double f[max原创 2016-07-22 16:55:05 · 301 阅读 · 0 评论 -
uva563
题意:每条路只能走一个人,不能在有交叉的点,要保证所有的银行都覆盖住思路:如果汇点的容量如果是银行总数那么自然所有的银行都走过了,这要求每个银行都拉成一条容量为1的线,起点通向0,终点通向maxn(自己设定,在边界外),且表格内每个点都通向终点,容量为1,这保证了容量最多是银行数量,且逃跑后每条路只有一个人代码:#include#include#include#inclu原创 2016-07-24 14:39:04 · 276 阅读 · 0 评论 -
uva10806
题意:给出点与边,求两条不重边的最短路径思路:用网络流控制数量为两条(cap控制),保证以最小流连贯到底,其实就是控制次数,map保证每条路一次要注意的是,走过的路径中反向的map为原先的负数,道理和网络流的对称性一致代码:#include#include#include#include#includeusing namespace std;const int原创 2016-07-25 20:47:43 · 265 阅读 · 0 评论 -
uva11045
题意:衣服共有六种型号,现给出套数,志愿者人数,以及每个志愿者合适的型号,问能否让所有志愿者都有衣服思路:由于衣服共六种型号,又有中数量,可以知道每种型号几件,这是建一个起点0指向每个型号,cap为n/6,然后志愿者可穿型号流向志愿者,流量为1,然后每个志愿者流向终点,流量也为1,因为每个人最多穿一件代码:#include#include#include#include原创 2016-07-27 12:13:18 · 247 阅读 · 0 评论 -
uva
题意:m个产品,n个插头,k种转化器。无限多个,求有几个产品不能配上插头思路:建图从原点到产品,产品到对应的插头,如果这种插头有转化器,则插头连向插头,个数为无穷产品1-m,插头m+1-m+n,这里要特别注意,因为有除了n种以外的插头需要特别记录下来,最终只能转化为n个里面的一种才能用代码:#include#include#include#include#include原创 2016-07-27 18:51:05 · 240 阅读 · 0 评论 -
文章标题
题意:个你一个转轮,有5种颜色,为了5中颜色的位置是确定的,为了方便处理我们用01234来表示绿,黑,红,蓝,白。轮子可以沿着它的方向滚动(只能是它当前的方向不能相反方向),每滚动一次会到达另一个格子,着地的颜色会改变,变了之前颜色的下一个,例如当前是绿色着地下一次就是黑色,依次是红蓝白。也可以原地转动(顺逆时针都可以),原地转动其实就是改变了轮子的滚动方向,原地转动每次能转90度。原地转动一次和滚原创 2017-03-25 15:50:51 · 199 阅读 · 0 评论