TYVJ1982 武器分配
描述
这些武器的型号不相同(武器是由出价最低的承包商制造的),把一部m型的机枪和一套n型的盔甲分配给一个marine得到的不满意值为(m-n)^2(每个marine当然希望自己得到的武器是同一型号的)。
你的任务就是把a部机枪和b套盔甲分配给手下n个marine。使他们的不满意值之和最小。
输入格式
第二行:a 个数表示每部机枪的型号
第三行:b 个数表示每套盔甲的型号
0<=型号值<=10000
输出格式
测试样例1
输入
Sample 1:
2 3 3
9 10 20
0 10 11
Sample 2:
3 4 4
3 9 7 4
4 2 5 5
输出
Sample 1:
2
Sample 2:
5
费用流。
有最大流量限制,那么就在汇点T后面加个T2,从T到T2连边,容量为n(最大人数)。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
using namespace std;
const int INF=1e8;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct edge{
int from,v,nxt;
int f,w;
}e[mxn<<];
int hd[mxn],mct=;//
inline void add_edge(int u,int v,int c,int w){
e[++mct].v=v;e[mct].from=u;e[mct].nxt=hd[u];e[mct].f=c;e[mct].w=w;hd[u]=mct;return;
}
void insert(int u,int v,int c,int w){
add_edge(u,v,c,w);
add_edge(v,u,,-w);
return;
}
//
int n,m;
int S,T,T2;
int ans=;
//
int dis[mxn];
bool inq[mxn];
int pre[mxn<<];
void SPFA(int s){
memset(dis,0x3f,sizeof dis);
memset(pre,-,sizeof pre);
queue<int>q;
dis[s]=;
inq[s]=;
q.push(s);
while(!q.empty()){
int u=q.front();q.pop();inq[u]=;
for(int i=hd[u];i;i=e[i].nxt){
if(!e[i].f)continue;
int v=e[i].v;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
pre[v]=i;//记录前驱边
if(!inq[v]){
inq[v]=;
q.push(v);
}
}
}
}
return;
}
void maxflow(int s,int t){
SPFA(s);
while(pre[t]!=-){
int tmp=INF;
for(int i=pre[t];i!=-;i=pre[e[i].from])
tmp=min(tmp,e[i].f);
ans+=dis[t]*tmp;
for(int i=pre[t];i!=-;i=pre[e[i].from]){
e[i].f-=tmp;
e[i^].f+=tmp;
}
SPFA(s);
}
return;
}
int a,b;
int ac[],bc[];
int main()
{
int i,j,u,v;
n=read();a=read();b=read();
for(i=;i<=a;i++){ac[i]=read();}
for(i=;i<=b;i++){bc[i]=read();}
S=;T=a+b+;T2=T+;
for(i=;i<=a;i++)
for(j=;j<=b;j++){
insert(i,a+j,,(ac[i]-bc[j])*(ac[i]-bc[j]));
}
for(i=;i<=a;i++)insert(S,i,,);
for(i=;i<=b;i++)insert(a+i,T,,);
insert(T,T2,n,);//限制匹配人数
maxflow(S,T2);
printf("%d\n",ans);
return ;
}
TYVJ1982 武器分配的更多相关文章
- 【TYVJ】1982 武器分配(费用流)
http://tyvj.cn/Problem_Show.aspx?id=1982 一眼题.. 源向每个人连容量为1,费用为0的边. 每个人向一个中转节点na连容量1,费用0的边(你也可以不连,直接连后 ...
- 【Tyvj1982】武器分配(费用流)
题意:有N个人要从A个物品中各取一个,B个物品中各取一个,选取第i个A类物品和第j个B类物品的费用是(a[i]-b[j])^2 求最小总花费 n<=a,b<=80 a[i],b[i]< ...
- 9-26模拟赛 By cellur925
1.计数 (count.cpp/c/pas)时间限制:1s内存限制:256MB[问题描述]给出 m 个数 a[1],a[2],…,a[m]求 1~n 中有多少数不是 a[1],a[2],…,a[m]的 ...
- 10.13NOIP模拟题
/* 容斥原理 考虑到a[i]要么不会太大,要么就对答案贡献很小 dfs即可 */ #include<bits/stdc++.h> #define ll long long #define ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- MySQL加速查询速度的独门武器:查询缓存
[导读] 与朋友或同事谈到MySQL查询缓存功能的时候,个人喜欢把查询缓存功能Query Cache比作荔枝, 是非常营养的东西,但是一次性吃太多了,就容易上火而流鼻血,虽然不是特别恰当的比喻,但是有 ...
- 【CUDA开发】CUDA编程接口(一)------一十八般武器
子曰:工欲善其事,必先利其器.我们要把显卡作为通用并行处理器来做并行算法处理,就得知道CUDA给我提供了什么样的接口,就得了解CUDA作为通用高性能计算平台上的一十八般武器.(如果你想自己开发驱动,自 ...
- Go语言内存分配(详述 转)
一.内存管理简介 1.1 虚拟内存 虚拟内存是当代操作系统必备的一项重要功能,对于进程而言虚拟内存屏蔽了底层了RAM和磁盘,并向进程提供了远超物理内存大小的内存空间.我们看一下虚拟内存的分层设计. 上 ...
- TypeScript: Angular 2 的秘密武器(译)
本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...
随机推荐
- (原创)AD账户误删导致Exchange邮箱被删 莫苦恼
由于人员变动,离职人员AD账户和邮箱经常要删除.但是在删除AD账户的时候难免会犯错,将在用的用户给删除了,这是个痛苦的事情, 然后你会发现Exchange邮箱也会跟着删除,抓狂了..,还好,幸亏这里进 ...
- Ros与Vrep平台搭建
参考资料: ROS安装: ros 是一个framework 和Android有点像,内核用的linux.Ros提供了一种供机器人开发者迅速上手的一个平台, 可以快速搭建自己的应用,利用ros下面自带的 ...
- c++ 指针(一)
指针:是说指针名表示的是地址.是一个变量,存储的是值的地址,而不是值本身 *运算符被称为间接值或解除引用运算符也可以叫做取地址符 声明一个指针 int * p_data; * p_data的类型为in ...
- 简单高效的nodejs爬虫模型
这篇文章讲解一下yunshare项目的爬虫模型. 使用nodejs开发爬虫很简单,不需要类似python的scrapy这样的爬虫框架,只需要用request或者superagent这样的http库就能 ...
- TortoiseSVN安装使用(转)
TortoiseSVN是windows平台下Subversion的免费开源客户端. 一般我们都是先讲讲服务器的配置,然后再讲客户端的使用,但是在TortoiseSVN上,却可以反过来.因为,如果你的要 ...
- 多线程处理中Future的妙用
java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果.在两种情况下,离开Future几乎很难办.一种情况是拆分订单,比如你的应用收到一个批量订单 ...
- [BZOJ1854][Scoi2010]游戏(二分图匹配/并查集)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法 ...
- 屠龙之路_击败DB小boss_FifthDay
摘要:服务器大魔王被击败的消息传到了恶龙boss那里,恶龙大怒派出了自己的首级大将DB人称小boss,但小boss的名号并没有吓到七位屠龙勇士,经过他们齐心协力的进攻,最终击败了DB,小boss临死前 ...
- HTML5存储
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外co ...
- Linux chkconfig命令
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...