首页 > 其他分享 >题解 ABC326G【Unlock Achievement】

题解 ABC326G【Unlock Achievement】

时间:2023-10-30 11:35:12浏览次数:46  
标签:ABC326G int 题解 满足 60 leq Unlock include 代价

题解 ABC326G【Unlock Achievement】

problem

有 \(n\) 项属性,第 \(j\) 个属性的等级 \(l_j\) 初始为 \(1\),每提升一级花费 \(c_j\) 的钱。又有 \(m\) 项成就,第 \(i\) 项成就要求对于所有 \(1\leq j\leq n\),都要 \(l_j\geq L_{i,j}\),如果满足所有要求,获得 \(a_i\) 的钱。求你最多能获得多少钱。\(n,m\leq 50,L\leq 5\)。

solution

考虑网络流。不妨按照 2-sat 的方式思考,\(s_{j,p}\) 是一个 bool 变量,表示最终 \(l_j\geq p\) 的真假。\(t_i\) 表示最终成就 \(i\) 是否完成。为了统一行使,不妨先认为所有成就均已完成,你要升级或者放弃一部分成就,花费最少的钱满足限制。

最小割。使得所有点 \(p\) 都连边 \(S\to p\to T\),规定割断左边的边表示这个点对应的命题成立,代价加在左边的边上,反之亦然。刻画限制:

  • \(s_{j,1}\) 总是满足,满足的代价是 \(0\)。
  • \(s_{j,p}(p>1)\) 满足的代价是 \(c_j\),不满足的代价是 \(0\)。且如果 \(s_{j,p}\) 那么 \(s_{j,p-1}\)。\(\iff\) 若 \(s_{j,p}\),那么 \(\neg s_{j,p-1}\) 的代价是无穷大。
  • \(t_i\) 不满足的代价是 \(a_i\)。(一开始满足了所有成就)
  • 如果 \(t_i\) 那么对所有 \(j\) 满足 \(s_{j,L_{i,j}}\)。\(\iff\) 如果 \(t_i\) 那么所有 \(\neg s_{j,L_{i,j}}\) 的代价是无穷大。
  • (这里形如如果 \(a\) 那么 \(\neg b\) 的代价是无穷大 就是 从 \(b\) 连无穷大边到 \(a\))

然后快乐最小割就行,点数 \(O(nL+m)\) 边数 \(O(nL+nm)\),总是能过的。

code

#include "atcoder/maxflow"
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr, ##__VA_ARGS__)
#else
#define debug(...) void(0)
#endif
typedef long long LL;
typedef atcoder::mf_graph<int> graph;
int n, m, s0, t0, id[60][10], it[60], ans, tot = -1, c[60], a[60], L[60][60];
int main() { 
  scanf("%d%d", &n, &m);
  s0 = ++tot, t0 = ++tot;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &c[i]);
    for (int j = 1; j <= 5; j++) id[i][j] = ++tot;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d", &a[i]);
    ans += a[i];
    it[i] = ++tot;
  }
  graph g(tot + 1);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 5; j++) g.add_edge(s0, id[i][j], j > 1 ? c[i] : 0);
    for (int j = 2; j <= 5; j++) g.add_edge(id[i][j - 1], id[i][j], 1e9);
  }
  for (int i = 1; i <= m; i++) {
    g.add_edge(it[i], t0, a[i]);
    for (int j = 1; j <= n; j++) {
      scanf("%d", &L[i][j]);
      g.add_edge(id[j][L[i][j]], it[i], 1e9);
    }
  }
  printf("%d\n", ans - g.flow(s0, t0));
  return 0;
}

标签:ABC326G,int,题解,满足,60,leq,Unlock,include,代价
From: https://www.cnblogs.com/caijianhong/p/solution-abc326g.html

相关文章

  • ADASTRNG - Ada and Substring 题解
    ADASTRNG-AdaandSubstring题解题目描述给定一个小写字符串。输出\(26\)个数,代表以\(\texttt{a}\sim\texttt{z}\)开头的本质不同的子串个数。题目分析高度数组模板题。可以想到将以每个字符开头的本质不同的子串数目转化为:以每个字符开头的所有字串数目减去以每......
  • Luogu P4168 [Violet] 蒲公英 题解
    题目链接[Violet]蒲公英分析可以先将\(a[i]\)离散化然后考虑分块对于询问\(x,y\),\(x\)属于\(p\),\(y\)属于\(q\)当\(q-p<=1\)时直接暴力枚举即可,时间复杂度为\(O(\sqrt{n})\)\(else\)如图中间为分好块的地方我们发现,\(ans\)只可能为中间的众数或两边的......
  • 2023年10月第四周题解------输入与输出
     问题A:ly喜欢玩石头 解题思路题目告诉我们(1<=a,b<=1e9),那么int类型就够了。因为这两个数相加最大为20亿定义两个变量a和b输入a和b的值打印a加b的值#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<time.h>intmain......
  • 题解:「NOIP2022 提高组」种花
    题解:「NOIP2022提高组」种花题目大意:给定一个\(n\timesm\)的01矩阵,0表示可以种花,1表示土坑(无法种花),现在要在图上种出一个C型或F型(C,F横着的两条线的长度都可以不同,但一定是面向右边的),现在问你种C和F分别有多少种方案(除了这个形状外不能在任何地方种花),多组数据,\(T\leq5\)。......
  • 【梦熊联盟】10月28日 NOIP十连测 第五场 题解
    目录T1男女排队简要题意:题解:T2树上最多不相交路径简要题意:题解:T3生日T4组队比赛简要题意:题解:T1男女排队简要题意:求长度为\(n\)的01序列不包含字串101或111的个数。\((n\leqslant10^{18})\)题解:一开始往容斥的思路去想,但是在推式子的时候发现其实很难容斥掉一个子串......
  • 常见问题解决 --- 安卓12关闭phantom processes killer杀后台功能
    1.adb连接成功后,执行adbdevices2.执行adbshell3.执行device_configset_sync_disabled_for_testspersistentdevice_configputactivity_managermax_phantom_processes2147483647settingsputglobalsettings_enable_monitor_phantom_procsfalse......
  • 常见问题解决 --- adb连接失败
    可能原因有,手机问题,电脑问题,线材问题。手机问题有:没有开启adb调试usb连接模式不是文件传输模式电脑问题有:adb驱动安装版本不匹配adb没有正确安装安卓驱动没有安装线材质量不好,断开 ......
  • VMware VCSA 5480 后台登录提示无法登陆问题解决
     通过控制台登入启用shell使用service-control--status--all查看applmgmt服务状态(显示已停止) 使用service-control--startapplmgmt启动服务 回车后会自动退出命令行模式 此时回到浏览器新建标签页重新登录5480端口成功    使用官网说明使用SingleS......
  • 【题解】P9753 [CSP-S 2023] 消消乐(字符串哈希,DP)
    【题解】P9753[CSP-S2023]消消乐不知道考场脑子是抽了还是有病,全程都不知道在放什么屁。特别鸣谢:@dbxxx给我讲解了解法一的满分做法,并让我对哈希有了更加深刻的认识;@Daidly给我讲解了解法二。题目链接P9753[CSP-S2023]消消乐题意概述给定一个长度为\(n\)的只含小......
  • AtCoder Beginner Contest 326 题解
    首先,\(\text{HappyBirthdaytome!}\)A-2UP3DOWN常规ABCA...//If,oneday,Ifinallymanagetomakemydreamsareality...//Iwonder,willyoustillbetherebymyside?#include<bits/stdc++.h>#defineIOSios::sync_with_stdio(false)#defineTI......