以撒的谜题

Time Limit: 2000/1000 MS (Java/Others)   Memory Limit 65536/32768 K (Java/Others)

题目描述

以撒在天堂遇到了最终boss----以撒自己,他需要解开一道谜题来战胜最终的boss。

给出一个初始数列a[],以撒首先将每个a[i]加上[p, q]范围内的一个整数(加的数不一定要相同),然后以撒可以任意调换元素的位置最终得到一个新的数列b[]。现在以撒需要使两个数列对应位置的最大公约数的和值最小,请计算出这个和值得最小值。

输入

首先给出一个正整数T,表示有T组数据。每组数据包括:

第一行为3个整数n,p,q,这里0 < n < 100,0 <= p <= q <= 20;

第二行为n个正整数,表示初始数列,这里0 < a[i] <= 10000。

输出

每组数据输出一个正整数表示和值得最小值

样例输入

2

4 0 0

2 3 6 8

4 1 2

2 3 6 8

样例输出

6

4

题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2094

题目分析:比较裸的二分图最大权匹配,20000条边直接费用流搞了

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int const INF = 0x3fffffff;
int const MAX = 205;
int n, p, q, a[105];
int head[MAX], cnt;
int pre[MAX], dis[MAX];
int src, sk, ans;
bool vis[MAX];struct EDGE
{int to, nxt, cap, cost;
}e[MAX * MAX];int gcd(int a, int b)
{   return b ? gcd(b, a % b) : a;
}void Init()
{ans = 0;cnt = 0;memset(head, -1, sizeof(head));
}void Add(int u, int v, int cap, int cost)
{e[cnt].to = v;e[cnt].cap = cap;e[cnt].cost = cost;e[cnt].nxt = head[u];head[u] = cnt ++;e[cnt].to = u;e[cnt].cap = 0;e[cnt].cost = -cost;e[cnt].nxt = head[v];head[v] = cnt ++;
}void Build_graph()
{src = 0;sk = 2 * n + 1;for(int i = 1; i <= n; i++)Add(src, i, 1, 0);for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){int mi = INF;for(int k = p; k <= q && mi != 1; k++)mi = min(mi, gcd(a[i], a[j] + k));Add(i, n + j, 1, mi);}}for(int i = n + 1; i < sk; i++)Add(i, sk, 1, 0);
}bool SPFA()
{memset(vis, false, sizeof(vis));for(int i = 0; i <= sk; i++)dis[i] = INF;queue <int> q;q.push(src);vis[src] = true;dis[src] = 0;pre[src] = -1;while(!q.empty()){int u = q.front();q.pop();vis[u] = false;for(int i = head[u]; i != -1; i = e[i].nxt){int v = e[i].to;int cost = e[i].cost;int cap = e[i].cap;if(cap && dis[v] > dis[u] + cost){dis[v] = dis[u] + cost;pre[v] = i; if(!vis[v]){vis[v] = true;q.push(v);}}}}return dis[sk] != INF;
}void Augment()
{while(SPFA()){int mi = INF;for(int u = sk; u != src && mi != 1; u = e[pre[u] ^ 1].to)mi = min(mi, e[pre[u]].cap);for(int u = sk; u != src; u = e[pre[u] ^ 1].to){e[pre[u]].cap -= mi;e[pre[u] ^ 1].cap += mi;ans += mi * e[pre[u]].cost;}}
}int main()
{int T;scanf("%d", &T);while(T --){scanf("%d %d %d", &n, &p, &q);for(int i = 1; i <= n; i++)scanf("%d", &a[i]);Init();Build_graph();Augment();printf("%d\n", ans);}
}

NOJ 2094 以撒的谜题 (费用流)相关推荐

  1. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  2. 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]

    题目链接 题目大意: 就是给你一个nnn个点mmm条边的无向图,每个点有个值是aia_iai​现在你把每条边都赋予一个方向之后这个图就是有向图了,那么设第iii个点的入度是did_idi​,现在设 D ...

  3. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

  4. 餐巾计划问题 线性规划与网络流24题之10 费用流

    相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...

  5. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  6. bzoj3171: [Tjoi2013]循环格(费用流)

    传送门 其实这题的建图并不难(虽然我并没有想出来) 首先,每一个点的入度和出度必须为$1$ 那么我们考虑拆点 每个点的出度点向它能到达的点的入度点连边,容量$1$,如果方向为原来的方向则费用$0$否则 ...

  7. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

  8. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

  9. [Bzoj1061][Noi2008]志愿者招募(费用流)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1061 一开始疯狂想dp,然后队友走过来瞄一眼就告诉我像费用流,菜的真实,jpg. 一种比 ...

最新文章

  1. java总复习_java期末复习
  2. 代码重构(二):类重构规则
  3. 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
  4. uni-app实现传值路径乱码的问题
  5. java.lang.ClassNotFoundException: retrofit2.Retrofit$Builder解决思路
  6. 贪心算法——合并区间(Leetcode 56)
  7. Python数据分析学习笔记:计算相关系数
  8. pythongui 三维_python图形GUI基本示例
  9. 冒泡排序java代码_美团面试,我竟然输给了冒泡排序。。。
  10. 小川opencv100例 之 准备食材 之 读取视频
  11. js把HTML转成对象,将js对象转换为html
  12. Mongodb释放内存
  13. 2019ICPC徐州打铁心得
  14. 冯诺伊曼体系结构建模与模拟 之TOY模型机※
  15. 瑞幸咖啡新获2.5亿美元融资背后
  16. SAP 小币种金额的转换函数和处理
  17. Android 汉字转拼音工具
  18. U盘安装ubuntu(双系统共存)
  19. 解决wps VBA安装的问题
  20. java:多态详解,以及对象的向上和向下转型

热门文章

  1. 史上最牛的qq空间,访问次数已经高达2亿7千多万次。
  2. scanf%[^\n]的进一步研究
  3. 云服务器-裸金属介绍
  4. 分享107个小清新ppt模板,总有一款适合您
  5. 如何在chrome上屏蔽百度热搜
  6. html怎么去除广告,无需外力 巧妙去除Vagaa哇嘎界面广告
  7. http://blog.sina.com.cn/s/blog_5eec6f3a0100hxwn.html
  8. 字节跳动Lark-EA部门春招-实习/校招/社招-咨询群
  9. 阿米巴管理模式适合什么类型的企业
  10. Window 10 优雅的快捷键