摘要: 先Floyd求牛到机器最短距离,然后二分枚举最长的边。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1<<30 阅读全文
posted @ 2015-10-03 18:59 WABoss 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 #define INF (1LL<<60) 7 #define MAXN 3333 8 #d 阅读全文
posted @ 2015-10-03 16:44 WABoss 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 选择若干条线段使权值最大,并且点覆盖次数不超过k。 建图如下:vs到0建立容量为k费用为0的边;坐标终点到vt连接一条容量为k费用为0的边;对于每两个相邻坐标连接一条容量为INF费用为0的边;对于线段每两个端点连接一条容量1费用为-cost的边。 这样跑最小费用最大流。相当于找出k个线段集合,每个集 阅读全文
posted @ 2015-10-03 16:20 WABoss 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 题目问的是从1到n再回到1边不重复走的最短路,本质是找1到n的两条路径不重复的尽量短的路。 1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 using namespace std; 6 阅读全文
posted @ 2015-10-03 11:58 WABoss 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 比较形象的是地图每个点都拆成三个点,这三个点限制流量为0或1,于是再一分为二,这样每个点都被拆成6个点。。。 其实拆两个点,连容量为柱子高的边,这样就行了。。 这题我掉坑了,“1 lizard was left behind.”。。虽然样例都把一切都说了。。要注意细节。。 1 #include<cs 阅读全文
posted @ 2015-10-03 11:17 WABoss 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 把入侵者看作边,每一行每一列都是点,选取某一行某一列都有费用,这样问题就是选总权最小的点集覆盖所有边,就是最小点权覆盖。 此外,题目的总花费是所有费用的乘积,这时有个技巧,就是取对数,把乘法变为加法运算,最后再还原。 另外还可以从最小割的思路去这么理解: 每一行与源点相连,容量为该行的花费;每一列与 阅读全文
posted @ 2015-10-03 10:07 WABoss 阅读(580) 评论(0) 推荐(0) 编辑