传送门 为了方便描述把固定点叫做白色点,Tree叫做黑色点 一种基于特殊性质的做法: 如果不算入选白色的权值,那么一定会选中所有白色点构成的凸包上的点,因为能够尽可能围更多的黑色点.然后我们在这个基础上删凸包上无用的白色点,就可以使得在围住尽可能多的黑色点的情况下白色点最少. 但是是否这就是最优解?我们考虑舍弃围住一个黑色点的情况.因为如果某个黑点在凸包中,那么一定存在三个凸包上的白色点,它们构成的三角形围住这个黑色点,使用三角剖分不难证明.所以舍弃一个黑色点最多只会舍弃三个白色点,而\(111…
pro:二维平面上,给定N个村庄.M个士兵驻守,把村庄围住,现在我们想留下更多的士兵休息,使得剩下的士兵任然满足围住村庄.N,M<500: sol:即是要找一个最小的环,环把村庄围住. 由于是环, 最小的点数等价于最小的边数. 所以我们求最小的边数,而士兵之间能有有向边,当且仅当所有的村庄在有向边的左边(逆时针连边). 然后就是floyd最小环. #include<bits/stdc++.h> #define ll long long #define rep(i,a,b) for(int…
转载请注明出处:http://blog.csdn.net/a1dark 分析:终于弄懂了floyd的原理.以前的理解一直肤浅.所以一做到floyd应用的题.就拙计了.其实floyd的本质DP.利用前K-1个点.便可以求出当前所成的最小环.具体实现如下(含注释): #include<stdio.h> #include<string.h> #define N 101 #define INF 0x7ffffff int mpt[N][N]; int dist[N][N]; int m,n…
这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在于状态转移方程的确立和SPFA的过程 //最短路:Floyd+SPFA(BFS)+DP //Time:20Ms Memory:336K //题目很好,数据较弱,网上部分代码有些问题却能够A掉 //题意:超级马里奥要从A+B处背着公主以最短路程到达1处,其中1-A是村庄,剩下的是城堡 // 有可使用K…
题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对于新手的我,看起来可能更方便些吧,顺便说下快捷键 先选中要操作的行,ctrl+shift+c 是注释 ctrl+shift+x是解注释(cb的快捷键) /* Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 也就是TSP…
find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3273    Accepted Submission(s): 1320 Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1…
Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstring> using namespace std; const int INF = 109, maxn = 252645135; int g[INF][INF], dis[INF][INF], pre[INF][INF]; int ans[INF]; //pr[i][j]记录i到j最短路径的第一个点 i…
Floyd最小环理解+模板: https://www.cnblogs.com/DF-yimeng/p/8858184.html 除了上述博文里写的,我再补充几点我的理解. 1.为什么先枚举ij求经过ijk的最小环再更新k? 因为更新了K点,dis[i][j]可能会经过K,那么再枚举ij求ijk可能会得到来回相同的路,那么就不是环了. 2.为什么需要两个数组? 一个数组dis[][]表示的是正常从u到v经过k的最短路, 另一个数组mp[][]表示的是不经过k的时候回来的时候的最短路. 通过mp[]…
题目描述 一张$n$个点$m$条边的有向图,通过每条边需要消耗时间,初始为$0$时刻,可以在某个点停留.有$q$个任务,每个任务要求在$l_i$或以后时刻到$s_i$接受任务,并在$r_i$或以前时刻到$t_i$完成任务.同一时刻可以接受多个任务.问:最多能完成多少任务. 输入 第一行,三个正整数$n$.$m$.$q$: 接下来$m$行,每行三个正整数$u_i$.$v_i$.$c_i$,表示有一条从$u_i$到$v_i$,耗时$c_i$的边. 接下来$q$行,每行四个正整数$s_i$.$t_i$…
题意:tsp问题,经过图中所有的点并回到原点的最短距离. 解题关键:floyd+状态压缩dp,注意floyd时k必须在最外层 转移方程:$dp[S][i] = \min (dp[S \wedge (1 <  < (i - 1))][k] + dis[k][j],dp[S][i])$ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include&…