摘要: 题意:模拟了汽车的行驶过程,边上的权值为全速通过所消耗的时间,而起步(从起点出发的边)、刹车(到终点结束的边)、减速(即将拐弯的边)、加速(刚完成拐弯的边)这四种不能达到全速的情况,消耗的时间为权值*2。问从起点到终点所消耗的最少时间。这道题主要是建图,很复杂,无耻地照着书上的代码码了一遍。让状态搞糊涂了= =注意:1、grid[][][4]记录了点的上下左右四条边的权值,id[][][4][2]记录各个点。2、到一个点的最短路可以是路过这个点再折返回来,e.g:1->2 c=17,2->3 c=4,从1->2的最短路为17+8+8=33 2 #include 3 #incl 阅读全文
posted @ 2013-08-23 21:02 Thousand Sunny 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 题意(真坑):傻国王只会求和,以及比较大小。阴谋家们想推翻他,于是想坑他,上交了一串长度为n的序列a[1],a[2]...a[n],国王作出m条形如(a[si]+a[si+1]+...+a[si+ni])>k(或n还是cnt[]>(n+1)。2、差分约束求解的是>=以及(或k等价于>=(k+1)。 1 #include 2 #include 3 #include 4 #include 5 #define rep(i,a,b) for(int i=a;iq;36 clr(cnt,0);37 rep(i,0,n){38 d[i]=0;39 inq[i... 阅读全文
posted @ 2013-08-23 13:30 Thousand Sunny 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 做的第一道差分约束的题目,思考了一天,终于把差分约束弄懂了O(∩_∩)O哈哈~题意(略坑):三元组{ai,bi,ci},表示区间[ai,bi]上至少要有ci个数字相同,其实就是说,在区间[0,50000]上,每一个三元组表示[ai,bi]之间至少要标记ci个数字,问至少要标记多少个数字。在学习差分约束的童鞋,建议看一下:09年姜碧野的《SPFA算法的优化及应用》,06年冯威的《浅析差分约束系统》,不过后者看起来较难搞懂,也可以看http://ycool.com/post/m2uybbf写的很不错。这里写一下我自己的一点心得:1、差分约束求的是什么? 这里分为两种:求值,判环。 求值:如这道.. 阅读全文
posted @ 2013-08-23 13:07 Thousand Sunny 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 一、核心性质:三角不等式。最短路满足d[v]maxlongint。借此提出:当dis[]>N*MaxEdge,可以判正环。(类比于入队n次) 2、环构成了连通分量,那么缩点后去掉连通分量之间的边,不影响判正(负)环。 3、牺牲程序正确性来判正(负)环。已知SPFA的平均运行时间为O(KM);而在存在环时,会因不断迭代使程序效率低下。借此提出:当程序效率低下时,存在正(负)环。表现形式为所有点入队总次数>T*(M+N),就判定存在,T一般取2,具体根据题目时限修改。分析:事实上,正是因为bfs迭代的不连续性,导致不能直接找到正环,退而求次,以n次入队判定。而n次入队其实包含了大量的冗 阅读全文
posted @ 2013-08-20 20:26 Thousand Sunny 阅读(1811) 评论(1) 推荐(0) 编辑
摘要: 暴力水过,剪一下枝= =果断是数据水了 1 #include 2 #include 3 #include 4 #define LL __int64 5 using namespace std; 6 7 const int MAXN=111111; 8 char str[MAXN]; 9 10 int same(int a,int b,int x,int y)11 {12 if(a==x)13 return min(b,y)-a;14 int i=0;15 while((a+i)<b&&(x+i)<y&&str[a+i]==str[x+i])16 .. 阅读全文
posted @ 2013-08-20 19:06 Thousand Sunny 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 还有什么好说的呢?打表题= = 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 #define MP make_pair 8 9 map ,pair > mm;10 11 void init()12 {13 mm[MP('0','0')] = MP('0','0');mm[MP('0','1')] = MP('0','1');mm[MP('0',' 阅读全文
posted @ 2013-08-20 17:12 Thousand Sunny 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d。现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小边权的最大值。不得不说,图论与动态规划的产物实在是神奇!!1、既然是“最小值最大”问题,容易想到二分答案。2、抽象出数学模型。这个在《训练指南》里写得已经很详细,鄙人还是以自己的理解表达一下。 这里有两处特别值得学习的地方。一、叠加:假设每个点都对应着一个(v,d)操作,那么对于边u->v来说,受到两个端点的影响,最终的权值为(c+du-dv)。二、抽象:这个没学过差分约束真心想不到。之前想 阅读全文
posted @ 2013-08-18 23:00 Thousand Sunny 阅读(443) 评论(0) 推荐(0) 编辑
摘要: 在加权有向图中求平均权值最小的回路。一上手没有思路,看到“回路”,第一想法就是找连通分量,可又是加权图,没什么好思路,那就转换题意:由求回路权值->判负环,求最小值->常用二分答案。二份答案,再利用利用bellman-ford判负环。注意:1、double:经常为了确定每个变量的类型,漏掉了某个变量,调半天心都凉了。干脆全变double。2、没有告诉m的数据范围,要是在比赛中肯定有人问,要是reply是“read carefully”,总不能猜吧,乖乖用vector吧= =3、原图为有向图,但不一定强连通,所以所有点要先入队才能找到全部的连通分量(就wa在这里) 1 #includ 阅读全文
posted @ 2013-08-18 13:17 Thousand Sunny 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了。03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑。题意:运送x个货物从a->b,沿途要上交过路费,village(小写字母)只需交一个单位的货物,town(大写字母)要交(x/20+((x%20==0)?0:1))个单位的货物,即每20个货物要上交一个,不足的按20处理。现在已知要送到b点y个货物,那么最少从x出发要携带多少个货物。注意:1、路过town:19=20-1,同时19=21-2,所以要求最小值。2、用dijkstra做,不过是从 b->a ,路径u-&g 阅读全文
posted @ 2013-08-17 21:13 Thousand Sunny 阅读(864) 评论(0) 推荐(0) 编辑
摘要: 花了一天半的时间,才把这道题ac= =确实是道好题,好久没敲这么长的code了,尤其是最后的判定,各种销魂啊~题目中给出的条件最值得关注的就是:每个点最多只能在一个环内->原图是由一个个边连通分量以树形连接组成的->做无向图缩点后,得到的是一个树形结构。题目要求:u->v,必须经过p,且不能重复经过同一个点,即在树上从u到v做一笔画。开始先想到汉密尔顿迹,不过那是走全部点的。利用已获得的树形结构,通过lca来判断p,这就是一个合理的作法。注意:由于是任意建树,p不一定是u,v的lca,纠结了好久才想出了一个方法:x=lca(u,v),然后遍历v->x,u->x两条 阅读全文
posted @ 2013-08-16 18:50 Thousand Sunny 阅读(442) 评论(0) 推荐(0) 编辑