动物森友会【科大讯飞杯L题】【二分答案+最大流】

2023-11-08

题目链接


  有N个物品,一周有7天,然后呢,要对应的每个物品都要达到各自的需求数量C_i,于是问,最少需要几天才可以达到要求?

  很明显的,这是线性关系的,我们可以用二分答案来解决这个问题,然后呢怎么知道是否满足条件也就是\sum C_i来确定的,要满足每个物品都要拿满。好了,这样不就有点构成最大流的性质了嘛(因为N很小),然后就是源点向N个物品链接流为C_i的边,然后物品向它对应的每一天链接边,然后对应每一天向汇点链接它的总贡献物资数量。

  记得开long long。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define Big_INF 0x3f3f3f3f3f3f3f3f
#define eps 1e-8
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e3 + 10, maxM = 2e4 + 7;
int N, E, S, T, head[maxN], cnt, cur[maxN];
ll need;
struct Eddge
{
    int nex, to; ll flow;
    Eddge(int a=-1, int b=0, ll c=0):nex(a), to(b), flow(c) {}
}edge[maxM];
inline void addEddge(int u, int v, ll w)
{
    edge[cnt] = Eddge(head[u], v, w);
    head[u] = cnt++;
}
inline void _add(int u, int v, ll w) { addEddge(u, v, w); addEddge(v, u, 0); }
struct Max_Flow
{
    int gap[maxN], d[maxN], que[maxN], ql, qr, node;
    inline void init()
    {
        for(int i=0; i<=node; i++)
        {
            gap[i] = d[i] = 0;
            cur[i] = head[i];
        }
        ++gap[d[T] = 1];
        que[ql = qr = 1] = T;
        while(ql <= qr)
        {
            int x = que[ql ++];
            for(int i=head[x], v; ~i; i=edge[i].nex)
            {
                v = edge[i].to;
                if(!d[v]) { ++gap[d[v] = d[x] + 1]; que[++qr] = v; }
            }
        }
    }
    inline ll aug(int x, ll FLOW)
    {
        if(x == T) return FLOW;
        int flow = 0;
        for(int &i=cur[x], v; ~i; i=edge[i].nex)
        {
            v = edge[i].to;
            if(d[x] == d[v] + 1)
            {
                ll tmp = aug(v, min(FLOW, edge[i].flow));
                flow += tmp; FLOW -= tmp; edge[i].flow -= tmp; edge[i ^ 1].flow += tmp;
                if(!FLOW) return flow;
            }
        }
        if(!(--gap[d[x]])) d[S] = node + 1;
        ++gap[++d[x]]; cur[x] = head[x];
        return flow;
    }
    inline ll max_flow()
    {
        init();
        ll ret = aug(S, INF);
        while(d[S] <= node) ret += aug(S, INF);
        return ret;
    }
} mf;
struct node
{
    int C, M, a[8];
    void In()
    {
        scanf("%d%d", &C, &M);
        for(int i=1; i<=M; i++) scanf("%d", &a[i]);
    }
} t[maxN];
inline void init()
{
    cnt = 0;
    for(int i=0; i<=mf.node; i++) head[i] = -1;
}
inline bool check(ll lim)
{
    init();
    for(int i=1; i<=N; i++) _add(S, i, t[i].C);
    ll week = lim / 7;
    int day = (int)(lim - week * 7);
    for(int i=1; i<=7; i++)
    {
        if(i <= day) _add(N + i, T, 1LL * (week + 1) * E);
        else _add(N + i, T, 1LL * week * E);
    }
    for(int i=1; i<=N; i++)
    {
        for(int j=1; j<=t[i].M; j++)
        {
            _add(i, t[i].a[j] + N, INF);
        }
    }
    return mf.max_flow() == need;
}
int main()
{
    scanf("%d%d", &N, &E);
    S = 0; T = N + 7 + 1; mf.node = T + 1; need = 0;
    init();
    for(int i=1; i<=N; i++) { t[i].In(); need += t[i].C; }
    ll L = 1, R = 7e8, mid, ans = 0;
    while(L <= R)
    {
        mid = (L + R) >> 1LL;
        if(check(mid))
        {
            R = mid - 1;
            ans = mid;
        }
        else L = mid + 1;
    }
    printf("%lld\n", ans);
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动物森友会【科大讯飞杯L题】【二分答案+最大流】 的相关文章

  • codeforces1169C 二分答案+思维

    1169C 1700的题 xff0c 然而比赛的时候没有做出来 题意 xff1a 给你一个n表示序列长度为n xff0c 还有一个m表示这个序列的最大值小于m 然后对这个数组进行多次操作 xff0c 一次操作为 对ai xff0c aj x
  • [二分答案] 洛谷P1873 砍树

    目录 题意样例样例输入 xff1a 样例输出 思路总结代码 题意 伐木工人米尔科需要砍倒M米长的木材 这是一个对米尔科来说很容易的工作 xff0c 因为他有一个漂亮的新伐木机 xff0c 可以像野火一样砍倒森林 不过 xff0c 米尔科只被
  • Reactor Cooling【ZOJ 2314】【无源汇有上下界可行流】

    题目链接 无源汇上下界可行流 没有源点 S 汇点 T 在网络中求可行流或者指出不存在 对于这个问题 不好处理 但是如果我们去掉流量下界限制 B 那么就是最大流的模型了 问题就可以解决了 但是 我们不能直接去掉 因为有可能存在入 出的情况 也
  • 网络流(最大流)基础入门

    好不容易大概搞懂了网络流 写个博客巩固一下 盗了点图 请图主原谅 定义 网络流与最大流 网络流是指给定一个有向图 和两个点 源点S和汇点T 点之间有连边 每条边有一个容量限制 可以看作水管 网络流就是指由S点流到T点的一个可行流 最大流就是
  • 【SGU 176】 Flow construction

    176 Flow construction time limit per test 0 5 sec memory limit per test 4096 KB input standard output standard You have
  • Arson In Berland Forest【Codeforces 1262 E】【二维差分 + 二分答案】

    Codeforces Round 602 Div 2 based on Technocup 2020 Elimination Round 3 E 这道E题当真是HACK了不少人 先讲一下题意吧 有一个N M的矩形 里面放了 X 和 两种类型
  • HS BDC 【HDU - 3472】【混合半欧拉图构建欧拉图+最大流】

    题目链接 有N个字符 如果字符可以首尾相同字符相接组成一条链的话 那么就是说明是well done的 不然 就不是 所以考虑成一条边 我们把每个字符串考虑成有向边 又有些字符串是可以反转的 实际上可以把它当成是无向边来考虑 现在 就是要知道
  • 网络流dinic算法复杂度

    Dinic算法的时间复杂度的理论上界是O N2 M N是结点数 M是边数 但实际上Dinic算法比这个理论上界好得多 如果所有边容量均为1 那么时间复杂度是O min N0 67 M0 5 M 对于二分图最大匹配这样的特殊图 时间复杂度是O
  • Business Cycle 【UVALive - 7501】【二分答案+思维处理】

    题目链接 14年的EC 银牌题 但是现在的大牛们进步神速 估计如今已经是道铜牌题了 具体我们先讲一下题意 一个长度为N的自环圈 每个点 1 N 上有自己对应的权值 可能为负数 我们用一个初始值进入这个环 每次走到一个节点的时候会加上这个节点
  • 【NOI2018模拟3.26】Cti

    Description 有一个 n m 的地图 地图上的每一个位置可以是空地 炮塔或是敌人 你需要操纵炮塔消灭敌人 对于每个炮塔都有一个它可以瞄准的方向 你需要在它的瞄准方向上确定一个它的攻击位置 当然也可以不进行攻击 一旦一个位置被攻击
  • Shoot the Bullet 【ZOJ - 3229】【有源汇有上下界最大流】

    题目链接 题意 有N天 M个妹纸 接下来是一行共M个数 表示M个妹纸要求你在N天内总共给他们拍摄至少Gi个照片 然后有N天 每天有个Ci和Di 表示今天有Ci个妹纸要拍摄 但是今天最多拍摄Di张照片 然后是Ci个妹纸 第一个是妹纸的编号 0
  • 地震逃生【最大流模板题】

    题目链接 P1343 地震逃生 简单的最大流的模板 小心 0 的RE情况 读题 另外 写的是ISAP include
  • Salary Changing【Codeforces 1251 D】【二分答案】

    Educational Codeforces Round 75 Rated for Div 2 D 题意 有N名员工和S元钱 然后我们想知道在每一名员工有薪资要求在 li ri 的情况下 我们如何在总共就S元钱的情况下做到员工薪资的中位数最
  • [NOI2009]植物大战僵尸【拓扑+最大权闭合子图】

    题目链接 BZOJ 1565 看到这道题之后很容易想到的就是最大权闭合子图了 但是却有个问题就是要去除掉那些环 因为构成了环之后 相当于是无敌的状态 它们就永远不会得到贡献 并且环之后的点也是得不到贡献的 所以 这里利用拓扑 知道哪些点是可
  • 【SDOI2016】数字配对【建立二分图+费用流求方案数】

    题目链接 首先 我们可以看一下这个推导过程 如果 那么 对于 就一定不是质数 一定是它的一个因子 于是可以看出 这一定是一幅二分图 于是 可以根据二分图的性质来确定了每个点的属于S边还是T边了 include
  • [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反 要直接求从起点到终点的最大距离 不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径 那么 就是阻止从左上角到右下角的所有相交圆 于是 就是要变成没有从左上角到右下角的相交圆才可以 那么不妨跑一个bfs来判断
  • Binary Tree on Plane【费用流】

    题目链接 CF 277 E 题意翻译 给你平面上 n 个点 2 n 400 要求用这些点组成一个二叉树 每个节点的儿子节点不超过两个 定义每条边的权值为两个点之间的欧几里得距离 求一个权值和最小的二叉树 并输出这个权值 其中 点 i 可以成
  • 二分答案总结&例题解析

    对于二分我们最初的了解 就是在一个一次函数中 对于要求的点 x y 已知y 对于包含x值的区间二分 根据函数值与y比较 逐步靠近要求的点 直到最终求出要求的点 在程序执行时 二分的时间复杂度为logn 可以极大的减少查找的时间 二分的应用
  • Match Points【Codeforces 1156C】【二分答案】

    题目链接 题意有点像上海EC某年的一道铜牌题 具体是哪年记不得了 我们要去N个的关系 使得最多的匹配对达到他们的差值 Z 这样的情况 有这样的一组数据可以很好的反映这道题为什么有人会WA了 4 3 1 4 5 7 但是 同时也证明了 我们取
  • 坐标前后限制转点的坐标取值+网络流拆维拆点:agc031_e

    https vj imken moe contest 598718 problem J 观察到数据范围很小 但一个很重要的信息我们缺失了 就是珠宝的数量 所以我们考虑枚举珠宝的数量 k k k 对于横纵坐标什么至多至少的限制 比如 a i

随机推荐

  • 【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上 游戏引擎导论

    本系列文章由zhmxy555 毛星云 编写 转载请注明出处 文章链接 http blog csdn net zhmxy555 article details 8250057 作者 毛星云 浅墨 邮箱 happylifemxy 163 com
  • Redis总结

    Redis 1 NoSQL的引言 NoSQL Not Only SQL 意即不仅仅是SQL 泛指非关系型的数据库 Nosql这个技术门类 早期就有人提出 发展至2009年趋势越发高涨 2 为什么是NoSQL 随着互联网网站的兴起 传统的关系
  • 黑苹果睡眠无法唤醒(OC引导)

    NVRAM 随机访问存储器设置 UUID 7C436110 AB2A 4BBB A880 FE41995C9F82 键 boot args 添加值 igfxonln 1
  • 2018老男孩脱产班linux运维51期

    2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 2018老男孩脱产班linux运维51期 链接 https pan baidu com s 1bnIJF6IoBC
  • Linux网络配置实验

    Linux的网络配置分为两种 手动和自动 下面我们先配置好Linux外面的设置 后面再去终端用命令行配置 框起来的网址记住 后面要用上 这里开始打开终端 用命令行配置 这是手动配置的 将前面记下来的网址适当填入对应的位置 对照这种图稍作修改
  • PBFT(拜占庭容错)

    PBFT 拜占庭容错 基于拜占庭将军问题 一致性的确保主要分为这三个阶段 预准备 pre prepare 准备 prepare 和确认 commit 流程如下图所示 其中C为发送请求端 0123为服务端 3为宕机的服务端 具体步骤如下 1
  • MySQL数据库查询默认是按什么进行排序的

    文章中所有操作均是在 MySQL 5 7 版本下进行的 引入问题 MySQL 普通查询它是按照什么进行排序的 我们稍微讨论下这个问题 我们先引入一个测试表 drop table if exists tbl test create table
  • Swagger 整合 Spring Boot

    title Swagger 整合 Spring Boot date 2021 10 1 tags spring springboot swagger categories spring springboot Swagger 整合 Sprin
  • Relation-Aware Global Attention for Person Re-identification (cvpr2020)

    首先这是一篇科大和微软亚研院的文章 文章很优美 非常值得一阅 本文主要是针对行人重识别提出一种从局部之间的关系找到相关性从而生成注意力的方法 可以理解成继承 Non local 或者 self attention 的方法 虽然理念相似 这些
  • 【css】css3动画实现鼠标悬停按钮动画

    html a href span span Button a css body margin 0 padding 0 font family sans serif a position absolute top 50 left 50 tra
  • 【20201023期AI简报】OpenCV 4.5 发布、NVIDIA开源NeMo,更多精彩点我!

    导读 本期为 AI 简报 20201023 期 将为您带来过去一周关于 AI 新闻 12 条 其他互联网圈内新闻10 条 希望对您有所帮助 有更好的建议或者意见请在下方留言 AI 1 OpenCV 4 5 发布 DNN 模型在 ARM 平台
  • 数据库表的各种连接(内连接,外连接)

    关系型数据库 以关系代数为理论基础 1 用表 Table 表示关系或者实体 2 用行 Row 表示元组 3 用列 Col 表示属性 关系代数包含以下8个关系运算符 单表操作 1 选取 返回满足指定条件的行 2 投影 从数据集合中返回指定的列
  • Vue和React的优缺点

    Vue和React是目前最流行的前端框架之一 它们都有自己的优点和缺点 在这篇文章中 我将会详细介绍Vue和React的优缺点 并给出一些建议 帮助你选择适合自己的框架 一 Vue的优点 1 简单易学 Vue的语法简单易懂 学习曲线较为平缓
  • 关于U盘制作启动盘后内存变小问题的解决

    不需任何工具 只需要输入几个简单命令即可 1 U盘插入电脑然后运行windows的命令窗口 命令窗口打开方式win R后输入 cmd或点击开始菜单 gt gt 运行 gt gt 输入cmd 2 在命令行输入diskpart然后回车 如图所示
  • 爬虫爬取mp3文件例子

    相信训练模型时数据集的获取也是一个很头疼的事情 搞cv领域的可以扛着摄像头架起三脚架拍摄获取 以前干过 但是如果是nlp领域的呢 特别是chatgpt等大模型出来后对这类文本等数据的需求更大 如果没有现成的数据集的话基本上很难自己创造数据
  • vue自定义指令实现按钮鉴权

    vue中提供了创建自定义指令api directives 一般接口返回权限表如下 在路由守卫中用户登录情况下获取权限 并提交mutations存储在 vuex中 ajax获取菜单数据 let menuList permissions awa
  • vant+vue3+ts 的滑块验证

    vant vue3 ts 的滑块验证 效果图
  • SpringBoot可执行包结构

    相对于传统的JAVA可执行包 jar文件 SpringBoot的包结构有比较大的不一样 标准的JDK定义的jar文件里面是不能够有内嵌jar文件的 所以通常我们在执行一个jar文件里面的应用程序时 还需要通过 classpath来告诉JDK
  • Atcoder beginner contest 303

    A Similar String AC代码 include
  • 动物森友会【科大讯飞杯L题】【二分答案+最大流】

    题目链接 有N个物品 一周有7天 然后呢 要对应的每个物品都要达到各自的需求数量 于是问 最少需要几天才可以达到要求 很明显的 这是线性关系的 我们可以用二分答案来解决这个问题 然后呢怎么知道是否满足条件也就是来确定的 要满足每个物品都要拿