hdu 3667 (拆边 mcmf)】的更多相关文章

注意题目中 边的容量 <= 5.可以把费用权值 a *f ^2化归成 a * f2, 即第一条边费用为 1 * a, 第二条 为 (4 - 1) * a, 第三条为 (9  - 4) * a...... #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; ; ; const int inf = 0x3f3f3f3f;…
Transportation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2301    Accepted Submission(s): 966 Problem Description There are N cities, and M directed roads connecting them. Now you want to t…
题目地址:HDU 3667 这题的建图真是巧妙...为了保证流量正好达到k.须要让每一次增广到的流量都是1,这就须要把每一条边的流量都是1才行.可是每条边的流量并非1,该怎么办呢.这个时候能够拆边,反正c最多仅仅有5,拆成5条流量为1的边.可是这时候费用怎么办呢,毕竟平方的关系不能简单把每一条边加起来.这时候能够把拆的边的流量设为1,3,5,7,9.假设经过了3个流量,那就肯定会流1,3,5.费用为9,是3的平方,同理,其它的也是如此.然后依照给出的边建图跑一次费用流就能够了. 代码例如以下:…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3667 思路:由于花费的计算方法是a*x*x,因此必须拆边,使得最小费用流模板可用,即变成a*x的形式.具体的拆边方法为:第i次取这条路时费用为(2*i-1)*a (i<=5),每条边的容量为1.如果这条边通过的流量为x,那正好sigma(2*i-1)(1<<i<<x)==x^2.然后就是跑最小费用最大流了. #include<iostream> #include<…
Transportation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2670    Accepted Submission(s): 1157 Problem Description There are N cities, and M directed roads connecting them. Now you want to…
题意:有n个城市(1~n),m条有向边:有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用. 思路:c<=5,这里可以做文章:把每条边拆成c条边,容量都为1,费用为ai*(2*i-1)(第二个i是指拆边时的第几条边).推导:x2-(x-1)2=2x-1. 代码: #include<stdio.h> #include<string.h> #define min(x,y) (x)&l…
题意: 有N个城市,M条有向道路,要从1号城市运送K个货物到N号城市. 每条有向道路<u, v>运送费用和运送量的平方成正比,系数为ai 而且每条路最多运送Ci个货物,求最小费用. 分析: 拆边,每条边拆成费用为a, 3a, 5a的边,这样就能保证每条边的费用和流量的平方成正比. 因为最多运送K个货物,所以增加一个源点和城市1连一条容量为K费用为0的边. 跑一边最小费用最大流,如果满流才有解. #include <iostream> #include <cstdio>…
http://acm.hdu.edu.cn/showproblem.php?pid=3667 最小费用最大流 本题流量和费用不是线性关系,fee=a*flow*flow,所以常规套模板spfa无法得到最小费用 观察到每条边流量上限只有5,则可以把一条流量为f的边拆成f条流量为1的边,每条边费用是a*(2*i-1)(1<=i<=f) #include <iostream> #include <cstring> #include <cstdio> #includ…
Transportation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3045    Accepted Submission(s): 1318 Problem Description There are N cities, and M directed roads connecting them. Now you want to…
题意: 在一般费用流题目改动:路过某路,每x单位流量须要花费 ai*x^2(ai为给定的系数). 開始的的时候,一看仅仅只是是最后统计费用上在改动罢了,一看例子.发现根本没那么简单(ps:以后每次写程序前先看例子能不能过.),由于是成平方关系.每次一流量增广的话.下次未必最优!于是想到我每次仅仅增长一个单位流量.每次增长一个单位之后,该路径上的全部边的费用边改为i^2-(i-1)^2,(第一次肯定增广a,其次的话3a.5a.7a....由于第一次已经增广了,和为第i次i平方就可以! )如此.符合…