2012年11月10日
摘要: 水题,题目比较长,描述的题意太长。CODE:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>usingnamespacestd;#defineMAXN25#defineINF0x3f3f3f3fintn,times;longlongd[MAXN][MAXN];voidinit(){for(inti=1;i<=20;i++){for(intj=1;j<=20;j++){if(i==j)d[i][j]=0;elsed[i][j]=INF;}}}vo 阅读全文
posted @ 2012-11-10 20:49 有间博客 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 水水更健康。建立正、反向图。CODE:#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<queue>usingnamespacestd;constintINF=0x3f3f3f3f;constintMAXN=1010;constintMAXM=100010;structEdge{intv,next,w;}edge[MAXM];intn,m,src;intcnt;intfirst[MAXN],d[MAXN],ans[MAXN];int 阅读全文
posted @ 2012-11-10 18:31 有间博客 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 大意:有两台机器A和B。机器A有n中工作模式,B有m种工作模式。给定k个作业,每换一个模式需要重启一次,让你求出完成k个作业机器最小的重启次数。机器A和B的初始模式为0。思路:任务i在A的mode_x与B的mode_y都可以做的话,那么就连一条边。这样问题就转换成了边最小覆盖的问题,而最小覆盖又可以通过最大匹配来求解。在写邻接表时要注意一个问题,就是在模式0完成的工作不需要重启,因此可以用 u*v的大小来判断是否连边。邻接表:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstr 阅读全文
posted @ 2012-11-10 17:01 有间博客 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 大意:给定一个MxN大小的方格,地图有3中方格,墙、草地、空地。他的老板希望Robert能在地图中放置尽可能多的机器人。每个机器人可以向四个方向开火,激光可以穿透草地,但不能穿透墙壁。思路:将一行被墙隔开且包含空地的连续区域叫做“块”。 把每个横向“块”看做二部图中的X中的顶点,竖向“块”看做集合中Y的顶点,若两个“块”有公共的顶点空地,于是就连一条边。这样就转换成了没有公共顶点的最大边集,即最大匹配。我们怎么去求“块”呢?用一个2个二维数组xs,ys来对水平方向和垂直方向上的“块”进行编号,编号之后如果两个块有公共的空地的话,那么就在“块”与“块”之间连边。即read_graph(xs[i] 阅读全文
posted @ 2012-11-10 10:39 有间博客 阅读(609) 评论(0) 推荐(0) 编辑