您的位置:首页 > 其它

hdu4258 Computer Assembling

2015-06-26 08:20 204 查看
先建图,对于每个物品的A价格,连一条A到该物品的容量为价格的边,对于B价格,则连一条该物品到B的容量为价格的边,这时就可以看出该图的任何一个割都是一个合理的决策,接着对于每个适配器的价格,在a物品和b物品间连两条反平行的容量为适配器价格的边,这时该图的割仍然是一个合理的决策(当同时在不同公司购买a和b时,必然会将边ab或ba算入割中),所以直接求最大流即可。

#include
#include
#include
#include
#include
#include

using namespace std;
#define _clr(a) memset(a,0,sizeof(a))
#define _source 0
#define _sink (n+1)

int gpi[510][510],n,m;
vectorgp[510];

bool input(){
for(int i=0;i<510;++i)
gp[i].clear();
_clr(gpi);
if(scanf("%d %d",&n,&m)==-1)
return 0;
int u,v,l;
for(int i=1;i<=n;++i){
scanf("%d",&u);
gp[_source].push_back(i),gpi[_source][i]=u;
gp[i].push_back(_source);
}
for(int i=1;i<=n;++i){
scanf("%d",&u);
gp[i].push_back(_sink),gpi[i][_sink]=u;
gp[_sink].push_back(i);
}
for(int i=0;i
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: