摘要: 思路:这题我在下午重现的时候就用的费用流做,可是各种悲催的超时,只是我一开始的那种建图方式多了一个二分查找。戏剧性的是,求距离的返回值写成int型了,CodeBlock编译器又没有警告,然后就WA啊WA,AC率一下就被拉低了。当然,对每种工人分别建图是不变的,因为每种工人互不影响。后来想到了一个较好的建图方式,将每个点拆成3个点,i,i+n,i+2*n。1号点就是仓库,也就是超级源点,3*n+1号点为超级汇点。由1号点想每个i建一条流量为ty[i][j],费用为1的边。表示每次增加流量,人数就增加。由i向i+2*n建一条流量为ty[i][j],费用为0的边。由i+2*n向汇点建一条流量为ty[ 阅读全文
posted @ 2013-08-24 23:26 fangguo 阅读(833) 评论(0) 推荐(0) 编辑
摘要: 思路:首先就是判断是否有奇环,若存在奇环,则输出No。然后用差分约束找是否符合条件。对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v[i]#include#include#include#include#define Maxn 1010#define Maxm Maxn*Maxn#define inf 100000000#define T 400using namespace std;int head[Maxn],vi[Maxn],col[Maxn],map[Maxn][Maxn],e,n,cnt[Maxn],dis[Maxn]; 阅读全文
posted @ 2013-08-24 21:16 fangguo 阅读(628) 评论(0) 推荐(0) 编辑
摘要: 思路:以val[u]-ans*edge[i].len最为边权,判断是否有正环存在,若有,那么就是ans小了。否则就是大了。在spfa判环时,先将所有点进队列。#include#include#include#include#include#include#define Maxn 1010#define Maxm 6000#define inf 1e10#define eps 1e-4using namespace std;int vi[Maxn];struct Edge{ int u,v,next; double len;}edge[Maxm];double dis[Maxn],v... 阅读全文
posted @ 2013-08-24 10:47 fangguo 阅读(155) 评论(0) 推荐(0) 编辑