摘要: struct Edge{ int from,to; int dist;};struct BellmanFord{ int n,m; vector<Edge>edges; vector<int>G[MAXN]; bool inq[MAXN]; int d[MAXN]; int p[MAXN]; int cnt[MAXN]; void init(int n) { this->n=n; for(int i=0;i<n;i++)G[i].clear(); edges.clear(); } ... 阅读全文
posted @ 2013-02-15 00:17 z.arbitrary 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题意:jimmy下班需要穿过一个森林。劳累一天后在森林中漫步是见非常惬意的事,所以他打算每天沿着不同的路径回家,欣赏不同的风景。但他也不想太晚回家,因此他不打算走回头路。换句话说,他只沿(A,B)走,存在一条从B出发回家的路径比所有从A出发回家的路径都短。你的任务是计算一共有多少条不同的回家路径分析:用dijkstra计算家到各个点的最短路径,则当d[i]>d[j],则有一条i-->j的路可走,因此形成了一个新图,且是DAG图。故可用动态规划计算方案。(使用记忆化搜索)// File Name: 2662.cpp// Author: zlbing// Created Time: 2 阅读全文
posted @ 2013-02-06 22:40 z.arbitrary 阅读(403) 评论(0) 推荐(0) 编辑
摘要: struct Edge{ int from,to,dist;};struct HeapNode{ int d,u; bool operator <(const HeapNode &rhs)const{ return d>rhs.d; }};struct Dijkstra{ int n,m;//点和边数 vector<Edge>edges;//边列表 vector<int>G[MAXN];//每个节点出发的边编号(从0开始编号) bool done[MAXN];//是否永久标记 int d[MAXN];//s到各个点的距离 ... 阅读全文
posted @ 2013-02-06 18:35 z.arbitrary 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题意:在Iokh市中,机场快线是市民从市内去机场的首选交通工具。机场快线分为经济线和商业线两种,线路,速度和价钱都不同。你有一张商业线车票,可以做一站商业线,而其他时候只能乘坐经济线。假设换乘时间忽略不计,你的任务是找一条去机场最快的路线。。分析:枚举商业线T(a,b),则总时间为f(a)+T(a,b)+g(b);f和g用两次dijkstra来计算,以S为起点的dijkstra和以E为起点的dijkstra;// File Name: 11374.cpp// Author: zlbing// Created Time: 2013/2/6 13:29:09#include<iostream 阅读全文
posted @ 2013-02-06 18:32 z.arbitrary 阅读(1374) 评论(0) 推荐(1) 编辑
摘要: POJ 2-sat六题最后一题http://blog.sina.com.cn/s/blog_64675f540100k2xf.htmlpoj 六道2-sat最后一题第六题:题目描述:有n个农场,每个农场有坐标x,y。有两个集合点s1和s2(也有坐标),每个农场必须连接其中的一个(有且仅有一个)。然后有A个条件,每个条件a,b表示a农场不能和b农场连接在一个集合点。然后再有B个条件,每个条件a,b表示a农场必须和b农场连接在一个集合点。问你,在各种合法的连接情况中,任何两个农场间的距离的最大值的最小值是多少。解题报告:每个农场i分成两个点,i和i + n,前面表示连接左侧集合点,后面的表示连接右 阅读全文
posted @ 2013-02-05 23:02 z.arbitrary 阅读(228) 评论(0) 推荐(0) 编辑
摘要: POJ 2-sat六题之五http://blog.sina.com.cn/s/blog_64675f540100k2rh.html题目描述:有2n把钥匙,分成2组,给你每组的钥匙信息,并且每组的钥匙只能用一个。有m个门,每个门有2个锁,只要打开一个锁这个门就开了。(顺序遇见m个门)问你最多能够打开多少个门。解题报告:2n个钥匙,定义4n个节点,1~2n中的i表示用第i个钥匙。 2n+1~4n中的j, 表示不用j - 2n号钥匙。那么对与给你的n组钥匙的每一组a和b。有边<a, b + 2n> 和 <b, a + 2n>(只能选一个钥匙)对于给你的m个门的两个锁a和b有边 阅读全文
posted @ 2013-02-05 16:07 z.arbitrary 阅读(211) 评论(0) 推荐(0) 编辑
摘要: POJ 2-sat 六题之四http://blog.sina.com.cn/s/blog_64675f540100k1g9.html题目描述:一堆夫妇去参加一对新人的婚礼。人们坐在一个很长很长的桌子的两侧(面对面)。新郎新娘在桌子头面对面座。新娘不希望看见她对面的一排有一对夫妇坐着(夫妇需要分开两排座)。同时,一些人之间有暧昧关系,新娘也不希望有暧昧关系的人同时坐在她对面的一排。问你可否满足新娘的要求,可以的话,输出一种方案。解题报告:首先,每个人都可能坐在桌子两侧的某一侧,这样,把每个人拆成两个点。第一个点表示桌子左侧(我自己定义的),第二个表示右侧。即i和i’新娘我让她坐在左侧,新郎坐在右 阅读全文
posted @ 2013-01-31 01:05 z.arbitrary 阅读(264) 评论(0) 推荐(0) 编辑
摘要: POJ 2-sat六题之三http://blog.sina.com.cn/s/blog_64675f540100k1cd.html题目描述:有n个婚礼,每个婚礼有起始时间si,结束时间ti,还有一个主持时间ti,ti必须安排在婚礼的开始或者结束,主持由祭祀来做,但是只有一个祭祀,所以各个婚礼的主持时间不能重复,问你有没有可能正常的安排主持时间,不能输出no,能的话要输出具体的答案:即每个婚礼的主持时间段是什么样的。解题报告:对于每个婚礼,主持时间只有两种状态,而且各个婚礼之间的主持时间之间有相互限制,所以想到2-sat。构图:对于婚礼i和婚礼j。i表示在开始主持,i2表示在结束主持,j类似。枚 阅读全文
posted @ 2013-01-30 23:41 z.arbitrary 阅读(242) 评论(0) 推荐(0) 编辑
摘要: POJ 2-sat 六题第二题http://blog.sina.com.cn/s/blog_64675f540100k15b.html题目描述:一些点,点的取值可以是0或者1,没有告诉你具体取值。一些边,有权值,有运算方式(并,或,异或),要求和这条边相连的两个点经过边上的运算后的结果是边的权值。问你有没有可能把每个点赋值满足所有边的要求。解题报告:每个点只有0,1两种值,并且和边对面的点有约束条件,所以可以转化为2-sat问题。令i表示点i去0,i + n表示点i取1.点i与点j and 等于0时。 i + n -> j, j + n -> iand 等于 1时,要求i和j必须为 阅读全文
posted @ 2013-01-29 23:42 z.arbitrary 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个n个点m条边的无向无环图,在尽量少的结点上放灯,使得所有边都被照亮,每栈灯将照亮以它为一个端点的所有边,在灯的总数最小的情况下,被两栈灯同时照亮的情况下边数最大解法:树形DP(边覆盖)d[i][0]=0,d[i][1]=1;d[i][0]=d[j][1];d[i][1]=min(d[i][0],d[i][1])cnt[i][0],cnt[i][1]表示节点i放灯和不放灯的情况下边被两栈灯照亮的数量。// File Name: 10859.cpp// Author: zlbing// Created Time: 2013/1/27 16:39:01#include<iostre 阅读全文
posted @ 2013-01-27 19:32 z.arbitrary 阅读(219) 评论(0) 推荐(0) 编辑