摘要:
某人要在城市A买一些石头运送到城市B.给出[n,m,L,p],总共有n个城市m条双向路,此人的资产L和石头单价p.每条路[u,v,c1,c2],表示城市u和v之间有一条容量为c1的路,也可以用c2的费用使这条路的容量增加1.问最多可以买的石头数目.显然石头的个数在[0,L/p]之间,并且买的石头越多,花费越大,故可以二分枚举石头的数目,从而将最优值问题转化为可行性判定问题.对于每一次枚举的石头数目C,可以这样构图 : 建立附加源S,连边SA,容量为C,费用为p;对于原图中的每条边[u,v,c1,c2],因为通过这条边的石头数目不大于c1的话,是不收费的,而大于c1的部分,每单位石头话费c2.
阅读全文
摘要:
费用流,不要求流量最大,但是要获利最大,需要对费用流算法有一定理解才行。每一次寻找增广路的时候,需要SPFA一次求出各点到汇点的最短路,既最小费用。这样的话,可以建出如下的图,首先,建出原题给的图,然后,再从城市2-n中,每一个城市,都向汇点连一条边,容量为无穷大,花费为-pi。这样的话,在SPFA的时候,如果能够找到一条到达汇点的路程为负数的路径的话,才返回真,否则假,这样就保证了每条流量都是获利的,求最大流量,既最大获利。View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio&g
阅读全文
摘要:
Your friend Jim has challenged you to a game. He has a bag containing red and blue marbles. There will be an odd number of marbles in the bag, and you...
阅读全文