上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 32 下一页
摘要: 最短路裸题啊,顶点数较多开不了邻接矩阵的,而且边数相对较少,稀疏图,用邻接表,写了个spfa和一个优先队列的dij,当做练手spfa#include <cstdio>#include <cstring>#include <queue>using namespace std;#define N 20010#define M 50010*2#define INF 0x3f3f3f3fstruct edge{ int u,v,w,next; }e[M];int first[N],d[N],vis[N];int n,m,s,t;void spfa(){ queue 阅读全文
posted @ 2012-12-10 20:17 Titanium 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 题意:固定起点1和终点n,从1到n,再从n回到1,去和回的路上相同的边只能用一次,求两次的和最短,如果去的时候不能去到终点或者回的时候回不到起点那么就输出Back to jail,否则输出两次和的最小值(此图是无向图,不会有重边,边的权值在大于1小于1000)两种理解一种思路是最小费用最大流另一种是最短路不唯一且两条或者多条最短路由共用边 ,或者最短路与次短路有共用边我先写的是第二种思路,最小费用最大流还没写,明天补上,并且补上思路第二种做法是,把无向图当做有向图处理,拆成两条边,先从1到n做一次最短路,并且要记录这条有向路径。最短路结束后,记录下最短路的值d[t],如果为d[t]=INF(t 阅读全文
posted @ 2012-12-09 23:51 Titanium 阅读(1030) 评论(0) 推荐(0) 编辑
摘要: DP(仿照Floyd)uva 10048 Audiophobia 一样的题目啊这次是要找s到t的所有路径中,最小边的最大值,还是仿照Floyd,不过状态转移方程改一下,而且建图初始化也改一下就可以了(题目说了每条边的权都大于1)建图邻接矩阵初始化为,d[i][j]=g[i][j],不存在的边用0表示状态转移方程d[i][j]=min( d[i][j] , max(d[i][k] , d[k][j]) );题目有一个很隐晦的地方就是,每次送旅客过去,导游也是要过去的(然后他自己再回来),所以没一趟导游都占了一个位置,如果大家觉得sample不对的话,那就是一个小问题了#include <c 阅读全文
posted @ 2012-12-09 19:44 Titanium 阅读(464) 评论(0) 推荐(0) 编辑
摘要: DP(仿照Floyd)题意:一个无向图,然后多个查询,查询是起点和终点s和t,s到t可能有多条路径,那么每条路径都会有一条权值最大的边,在所有的最大边中找一个最小的,如果s到t之间不连通,那么输出no path想了很久,大概有两个小时的样子…………然后看了一下数据,刚好最多有100个点,最多10000个查询,那么就给了一个很大的启发,会不会有一个算法会好像dij一样,运行一次能得到做个答案,或者一个算法好像floyd一样,运行一次可以知道所有答案,出于数据的特殊性,我更倾向于往floyd的方向想。floyd的本质是DP,其实这个问题也很容易发现就是个DP,状态转移方程为max=MAX{ d[i 阅读全文
posted @ 2012-12-08 23:08 Titanium 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 最小生成树和这道题是一样的,不过就是给出的数据不同hdu 1879 继续畅通工程说来惭愧,写hdu那个的时候是1Y的,但是写这个却WA了一次是因为整个做法想错了WA的想法是先用邻接矩阵建图,然后用一个had数组记录已经存在的边,在计算MST最小权值的时候如果是已有的边就不用算费用,所以需要adj数组去记录 边的信息但是这个方法显然是错的,因为MST不是唯一的,如果最后MST的总权值最小,但是可能不同的MST用到的已有的边的条数是不同,用到的已有的边最少,那么需要额外付的费用就越好,如果是上面那样做,显然是WA正确的做法就是把已有的边的权值赋值为0或者一个负数都可以(最好是0,那么就不用判断是否 阅读全文
posted @ 2012-12-08 00:17 Titanium 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 最小生成树#include <cstdio>#include <cstring>#include <cmath>#define INF 1000000000.0#define N 110double g[N][N],lowcost[N],x[N],y[N];int n,cov[N];double dis(int i , int j){ return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); }int main(){ int T; scanf("%d",&T); w 阅读全文
posted @ 2012-12-07 20:54 Titanium 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 最短路题意:有一栋楼100层,从0到99编号层数,有多部电梯(最多5部),给出每部每部电梯的速度,即上或下一层楼所用的秒数。然后每部电梯不一定在所有楼层出现,给你所有电梯可能出现的层数。给你一个目标层,要你从0层开始到目标层,问所用时间最短。在0层的时候选择做哪步电梯出发不需要时间的,但是在中间的楼层,想换电梯的时候,需要60秒这个题目看完就可以想到是最短路,每层楼是1个顶点,一共100个点,然后对于楼层而言可以通过电梯到达的话就是有一条边,权值就是时间,那么可能出现平行边,比如1号电梯可以从10楼到20楼,用时200秒,2号电梯也可以从10到20楼用时100秒……………………这题,一开始没想 阅读全文
posted @ 2012-12-07 13:28 Titanium 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 推荐技术公众号:不爱睡觉的大猪 题意: 描述 Lrc是校队里面的总所周知的全才王,他不仅是一个excelent acmer,也不仅是一个chess master,更是一个crazy game player。 切水果,正是他最喜欢玩的手机游戏之一。为了避免有人没玩过,下面介绍一下Lrc是怎么玩这个游戏 阅读全文
posted @ 2012-12-02 17:21 Titanium 阅读(6094) 评论(0) 推荐(0) 编辑
摘要: 数论水题,但是因为自己数论比较弱,而且这题也想了半个小时,所以还放上来题意:对于任意一个非负数N,我们定义D(N) 为N上奇数数字的和加上两倍偶数数字的和。举个例子:D(567) = 5 + 6 * 2 + 7 = 24, D(314159) = 3 + 1 + 2 * 4 + 1 + 5 + 9 = 27. 令F(N)表示D(N)的最后一位数字。例如:F(567) = 4, F(314159) = 7。你的问题是,给你两个数A, B,你要计算出∑F(i), i ∈ [A, B]输入格式第一行输入一个整数T,表述有T组case。(T <=1000)接下来T行,每行输入两个数字A, B ( 阅读全文
posted @ 2012-12-02 17:00 Titanium 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 最大流水题题意:给n个点从1到n标号,每个点有一个限制值a[i],表示从这个点流出的流量的最大值,就算有超过a[i]的流量流进i点,最后也只有a[i]流量从i点流出。然后每条有向边也有容量cap[u][v]然后给你一个源点0,它会和一些顶点相连,这些边的容量是无穷大的,然后给你一个汇点n+1,也会和一些顶点相连,这些边的容量也是无穷大的,然后求源点到汇点的最大流想了一下,有思路,无非是处理一下边的容量,起初想是对于有向边 u---->v cap[u][v]=min( cap[u][v] , a[u]); 处理完就直接最大流模板上去,过了sample,提交WA,后来才想到是cap[u][v 阅读全文
posted @ 2012-11-30 22:50 Titanium 阅读(536) 评论(1) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 32 下一页