上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: POJ 3686 费用流或KM。一个工厂接到了N张订单。他们有M个车间,如果第i张单在第j个车间加工需要花费Zij的时间。现在给出这个Z的矩阵,问做完这N张单需要时间的平均值(总时间/N)包括等待时间。(比如说我在一个车间连续以1个时间单位接了3张单,那么总时间为1+2+3=6,平均值为6/3=2)(N,MT不连通,则称这个点key vertex。问这张图中有多少个点是key vertex。代码:http://122.207.68.93:9090/csuacmtrain/problem/viewSource.action?id=12799HDU 3491 最小割:给出一张无向图,每个点上都有一 阅读全文
posted @ 2013-10-23 14:45 浙西贫农 阅读(387) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给出一张N+1个点和M条边的带权有向图,代表有N+1个城市和M条路,在0有警察局,1-N这些城市有犯罪分子,现在给你K个条子,从0从发,要求按从小到大的顺序依次收拾掉这些犯罪分子,每个条子到达一个城市的时候,他可以收拾这里的人,也可以不收拾,但绝不能让第i+1个城市的人早与第i个城市的人被干掉,求让这些人从0出发完成任务后回到0的走过的最短路之和。解法:这里给的K个条子可以不用完。。所以有两条边(S,0,K,0),(0,T,K,0)。然后为了保证每个点都被遍历到,需要拆点建边,并且保证这条边一定会走到(i,i',-oo,0)。对于城市1-N,从0出发最后要回到0,对应两条边( 阅读全文
posted @ 2013-10-15 22:44 浙西贫农 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给出计算GPA的公式。现在又N天时间,每天有k节课,每节课上,你只能复习一门课程,复习之后,该门课程的成绩可以提高1分。当然你也可以花好几节课的时间在一门课程上来使得这门课的成绩提高的更多,但是课程的得分不能超过100。然而,不是每节课上你想复习什么课程就可以什么课程,每天你只能复习一些课程。现在要你去把GPA刷高,前提是不能有挂科( 2 #include 3 #include 4 #include 5 #define maxn 110 6 #define maxm 3010 7 #define INF 100000 8 using namespace std; ... 阅读全文
posted @ 2013-10-15 20:09 浙西贫农 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 神奇的偏移量啊。其实一点也不神奇。。直接上KM就是了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 105 7 using namespace std; 8 9 struct KM 10 { 11 vector G[maxn]; 12 int W[maxn][maxn],n; 13 int Lx[maxn],Ly[maxn]; 14 int left[maxn]; 15 bool S[maxn],T[maxn]; 16 17 ... 阅读全文
posted @ 2013-10-14 21:25 浙西贫农 阅读(204) 评论(0) 推荐(0) 编辑
摘要: LRJ老师白书2上讲网络流的例题,只不过没有给出题号,今天偶然发现了这道题。这里,费用随流量的变化而变化,且正好与流量的平方成正比,可以巧妙的将原本1,4,9,16,25的5种不同情况下的费用拆成5条容量为1的边,他们的费用分别为1,3,5,7,9。因为每次增广的时候,肯定会选择去走费用最小的边,比如说走了cost=1的边之后,如果要再走这条路,肯定会去走cost=3的边(不可能去走cost=5,7,9的边),这样一来,把两条边加起来就是flow=2,cost=4。 1 #include 2 #include 3 #include 4 #include 5 #define maxn 1... 阅读全文
posted @ 2013-10-14 19:52 浙西贫农 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 拆点跑费用流 1 #include 2 #include 3 #include 4 #include 5 #define maxn 2010 6 #define maxm 10100 7 #define INF 1 Q; 34 for(int i = 0;i 0 && d[u] + cost[i] < d[v[i]]){ 41 d[v[i]] = d[u] + cost[i]; 42 pre[v[i]] = u;pos[v[i]] = i; 43 ... 阅读全文
posted @ 2013-10-14 19:08 浙西贫农 阅读(144) 评论(0) 推荐(0) 编辑
摘要: POJ 1386 判断有向图中是否存在欧拉回路 1 #include 2 #include 3 #include 4 #define maxn 30 5 using namespace std; 6 int fa[maxn],used[maxn],in[maxn],out[maxn]; 7 int find(int x){return x == fa[x] ? x : fa[x] = find(fa[x]);} 8 void Union(int a,int b){ 9 int x = find(a);10 int y = find(b);11 if(x != y)... 阅读全文
posted @ 2013-10-11 09:47 浙西贫农 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 【题目大意】N个盒子围成一圈。第i个盒子初始时有Ai个小球(∑Ai1则连边(s,i,Ai-1,0);若Ai=0则连边(i,t,1,0)。对任意两个盒子i,j,若Ai>1并且Aj=0,连边(i,j,∞,min(|i-j|,n-|i-j|))。求一次最小费用流即为结果。但是这样构图复杂度会很高,边数会达到O(N^2),不够聪明。更加简洁的方法是直接由每个盒子向与其相邻的两个盒子连边(i,j,∞,1),总共也才2N条,将边数降到了O(N),由TLE变成AC。以上摘自Edelwiss《网络流建模汇总》其实一开始基本上不会往那个T的方向去想。总之还是每种方案会对应一条边。 1 #include 2 阅读全文
posted @ 2013-10-09 09:25 浙西贫农 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 这题的费用流模型应该很明显,已知从起点开始一共可以走k次,那么容量就有了。对每个点,把他拆成(i,i'),因为点上的权只能取一次,以后再经过这个点的时候,权值为0,所以这里就对应了两条边(i,i',1,-w),(i,i',k-1,0)。另外,对于所有i点能够到达的点j,对应一条边(i',j,k,0)。跑一遍最小费用流再取反即为结果。 1 #include 2 #include 3 #include 4 #include 5 #define maxn 5010 6 #define maxm 100010 7 #define INF 1 Q;34 for(int i 阅读全文
posted @ 2013-10-09 08:59 浙西贫农 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 传说中的区间k覆盖问题。给定n个带权开区间,选择其中一些使得区间权值之和最大,且所有区间内任意点被覆盖不能超过k次。建图方法:1.将区间离散化,对于离散化后的区间端点所对应的点i,i+1,加边(i,i+1,k,0)2.对于每个区间(a,b),所对应离散化后的点(xx,yy),加边(xx,yy,-w,1),w为区间的权值3.由源点src连一条到一个点的边(src,1,k,0),同理,由最后一个点t连一条道汇点sink的边(t,sink,k,0)跑一遍最小费用了取反即为结果。 1 #include 2 #include 3 #include 4 #include 5 #defin... 阅读全文
posted @ 2013-10-08 12:20 浙西贫农 阅读(127) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页