第十九次CCF计算机软件能力认证-乔乔和牛牛逛超市

news2024/9/21 0:27:11

乔乔和牛牛去逛超市了,超市里有 n n n 种商品,他们决定买一些商品回家。

但是,第 i i i 种商品一旦被选择,购买的个数就必须是 L i L_i Li R i R_i Ri 之间的整数(含端点)。

某些商品之间有依赖关系,依赖关系有两种:

  1. 只有第 x x x 种商品被购买了,第 y y y 种商品才可以被购买。
  2. 只有第 x x x 种商品被购买了,第 y y y 种商品的购买个数才可以恰好是 L i L_i Li R i R_i Ri

购买一个商品带来的开心程度和这个商品购买的个数有关,若第 i i i 个商品购买了 x i x_i xi 个, x i > 0 x_i> 0 xi>0,则收益为 a i x i 2 + b i x i + c i a_ix_i^2+b_ix_i+c_i aixi2+bixi+ci,否则为 0 0 0

现在牛牛和乔乔想知道逛超市的最大总开心程度是多少。

输入格式

第一行包含两个整数 n , m n, m n,m,表示商品数量和依赖关系数量。

接下来 n n n 行,每行包含五个整数 L i , R i , a i , b i , c i L_i,R_i,a_i,b_i,c_i Li,Ri,ai,bi,ci,描述一个商品。

接下来 m m m 行,每行包含三个整数 z , x , y z, x, y z,x,y,表示第 x x x 种商品对第 y y y 种商品存在第 z z z 种关系。

输出格式

输出一个整数,表示最大总开心程度。

数据范围

0 ≤ n ≤ 1 0 4 0 \le n \le 10^4 0n104,
0 ≤ m ≤ 1 0 5 0 \le m \le 10^5 0m105,
1 ≤ L i ≤ R i ≤ 1 0 4 1 \le L_i \le R_i \le 10^4 1LiRi104,
− 5 ≤ a i ≤ 5 -5 \le a_i \le 5 5ai5,
− 1 0 4 ≤ b i , c i ≤ 1 0 4 -10^4 \le b_i,c_i \le 10^4 104bi,ci104,
L i + 1 ≤ R i − 1 L_i+1 \le R_i-1 Li+1Ri1
1 ≤ x , y ≤ n 1 \le x,y \le n 1x,yn,
1 ≤ z ≤ 2 1 \le z \le 2 1z2,
对于 20 % 20\% 20% 的数据, n ≤ 10 , R i ≤ 5 n \le 10,R_i \le 5 n10,Ri5
对于 40 % 40\% 40% 的数据, n ≤ 10 n \le 10 n10;
对于另外 20 % 20\% 20% 的数据,只有第 1 1 1 种依赖关系。

输入样例:
2 2
1 10 -2 3 -5
1 10 2 3 5
2 1 2
1 2 1
输出样例:
231
样例解释

1 1 1 种商品购买 1 1 1 个,第 2 2 2 种商品购买 10 10 10 个。

这个题非常恶心:对于我这个只会一些比较初级的算法的小白而言连暴力蒙20分都做不到。。就是只考虑第一种约束情况,也需要用到图论的最大权闭合图 参考代码如下:

#include<bits/stdc++.h>
using namespace std;

vector<int>edges[20010],ednum[20010];
long long f[400010],cur[20010],depth[20010],v1[20010],v2[20010];
long long n,m,idx=-1,S,T,tot=0;

long long get(long long a,long long b,long long c,long long l,long long r){
    if(a==0) return max(b*l+c,b*r+c);
    long long i=(-b)/(2*a),k=i+1,j=i-1;
    long long res=max(a*l*l+b*l+c,a*r*r+b*r+c);
    if(i>=l&&i<=r) res=max(res,a*i*i+b*i+c);
    if(k>=l&&k<=r) res=max(res,a*k*k+b*k+c);
    if(j>=l&&j<=r) res=max(res,a*j*j+b*j+c);
    return res;
}

void add(int a,int b,int c){
    edges[a].push_back(b),ednum[a].push_back(++idx),f[idx]=c;
    edges[b].push_back(a),ednum[b].push_back(++idx),f[idx]=0;
}

bool bfs(){
    memset(depth,-1,sizeof depth);
    depth[S]=0,cur[S]=0;
    queue<int>nodes;
    nodes.push(S);
    while(!nodes.empty()){
        int temp=nodes.front();
        nodes.pop();
        for(int i=0;i<edges[temp].size();i++){
            int t=edges[temp][i],e=ednum[temp][i];
            if(depth[t]!=-1||f[e]==0) continue;
            cur[t]=0;
            depth[t]=depth[temp]+1;
            if(t==T) return true;
            nodes.push(t);
        }
    }
    return false;
}

long long dfs(long long now,long long limit){
    if(now==T) return limit;
    long long flow=0;
    for(int i=cur[now];i<edges[now].size()&&flow<limit;i++){
        int t=edges[now][i],e=ednum[now][i];
        cur[now]=i;
        if(depth[t]!=depth[now]+1||f[e]==0) continue;
        long long u=dfs(t,min(limit-flow,f[e]));
        if(u==0) depth[t]=-1;
        flow+=u,f[e]-=u,f[e^1]+=u;
    }
    return flow;
}

long long dinic(){
    long long res=0;
    while(bfs()) res+=dfs(S,0x3f3f3f3f3f3f3f3f);
    return res;
}


int main(){
    cin>>n>>m;
    S=0,T=2*n+1;
    for(int i=1;i<=n;i++){
        int l,r,a,b,c;
        cin>>l>>r>>a>>b>>c;
        v1[i]=get(a,b,c,l+1,r-1);
        v2[i]=get(a,b,c,l,r)-v1[i];
        add(i+n,i,0x3f3f3f3f);
    }
    for(int i=1;i<=n;i++){
        if(v1[i]>0) add(S,i,v1[i]),tot+=v1[i];
        else if(v1[i]<0) add(i,T,-v1[i]);
        if(v2[i]>0) add(S,i+n,v2[i]),tot+=v2[i];
        else if(v2[i]<0) add(i+n,T,-v2[i]);
    }
    for(int i=0;i<m;i++){
        int z,x,y;
        cin>>z>>x>>y;
        if(z==1) add(y,x,0x3f3f3f3f);
        else add(y+n,x,0x3f3f3f3f);
    }
    cout<<tot-dinic();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google Play金融类应用上了又被下,怎么搞定设备短信权限问题?

不久前谷歌对金融类产品应用更新了政策要求&#xff0c;即8月31日起新注册的开发者账号必须得注册为企业账号才可以上架金融类产品应用&#xff0c;这对原本就是用企业号的开发团队或公司没什么影响&#xff0c;但如果用的是个人号得做点准备了。 可以看出&#xff0c;谷歌对金…

剑灵服务端源码(c#版本+数据库+配套客户端+服务端)

剑灵服务端源码&#xff0c;喜欢的下载研究研究。谁技术牛B的话&#xff0c;能把最新版本的客户端接上&#xff0c;就好了。 剑灵服务端源码&#xff08;c#版本数据库配套客户端服务端&#xff09; 下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【源码】剑灵服务端源码…

利士策分享,自我和解:通往赚钱与内心富足的和谐之道

利士策分享&#xff0c;自我和解&#xff1a;通往赚钱与内心富足的和谐之道 在这个快节奏、高压力的时代&#xff0c;我们往往在追求物质财富的同时&#xff0c;忽略了内心世界的和谐与平衡。 赚钱&#xff0c;作为现代生活中不可或缺的一部分&#xff0c;它不仅仅是生存的手段…

YOLOv8改进 - 注意力篇 - 引入ECA注意力机制

一、本文介绍 作为入门性第一篇&#xff0c;这里介绍了ECA注意力在YOLOv8中的使用。包含ECA原理分析&#xff0c;ECA的代码、ECA的使用方法、以及添加以后的yaml文件及运行记录。 二、ECA原理分析 ECA官方论文地址&#xff1a;ECA文章 ECA的pytorch版代码&#xff1a;ECA的…

C++第十一节课 new和delete

一、new和delete操作自定义类型 new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数&#xff08;new会自动调用构造函数&#xff1b;delete会调用析构函数&#xff09; class A { public:A(int a 0): _a(a){cout <&l…

systemd学习

传统init进程启动流程 kernel内核代码init/main.c&#xff0c;内核启动init进程过程&#xff1a; init进程是由内核启动的第一个&#xff08;也是唯一的一个&#xff09;用户进程&#xff08;进程id为1&#xff09;&#xff0c;它根据配置文件决定启动哪些程序&#xff0c;ini…

mybatisplus的多记录操作 批量删除和批量查询

1.批量查询 通过in查询 Testpublic void testBatchSelectByIds(){List<Integer> ids Arrays.asList(5,7);List<User> users userMapper.selectBatchIds(ids);log.info(users);} 2.批量删除 Testpublic void testBatchDelete(){List<Integer> ids Arrays…

LLM - 理解 多模态大语言模型(MLLM) 的 指令微调(Instruction-Tuning) 与相关技术 (四)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142237871 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…

Java知识点小结3:内存回收

文章目录 对象引用强引用软引用&#xff08;SoftReference&#xff09;弱引用&#xff08;WeakReference&#xff09;考一考 虚引用&#xff08;PhantomReference&#xff09;总结 垃圾回收新生代老年代永生代 内存管理小技巧尽量使用直接量使用StringBuilder和StringBuffer进行…

Vue学习记录之六(组件实战及BEM框架了解)

一、BEM BEM是一种前端开发中常用的命名约定&#xff0c;主要用于CSS和HTML的结构化和模块化。BEM是Block、Element、Modifier的缩写。 Block&#xff08;块&#xff09;&#xff1a;独立的功能性页面组件&#xff0c;可以是一个简单的按钮&#xff0c;一个复杂的导航条&…

A Simple Encoder-Decoder for Open-Vocabulary Semantic Segmentation

FAM: Feature Aggregation Module&#xff0c;Circle with R represents removing feature maps of non-selected categories 辅助信息 权重有1.3G&#xff0c;不建议复现

neo4j关系的创建删除 图的删除

关系的创建和删除 关系创建 CREATE (:Person {name:"jack"})-[:LOVE]->(:Person {name:"Rose"})已有这个关系时&#xff0c;merge不起效果 MERGE (:Person {name:"Jack" })-[:LOVE]->(:Person {name:"Rose"})关系兼顾节点和关…

功耗中30分钟下载场景对平均电流标准的影响评估

下载场景的测试数据: 测试结论:相同场景下,有应用下载安装跟没应用下载安装,平均电流相差90-140mA左右 查看数据:下载场景的平均增量电流 (227+279) / 2 - 136 = 117 mA 理论的量化数据影响 根据当前的测试数据:静置待机平均电流 136 mA,下载场景平均电流增量 117mA, …

相亲交易系统源码详解与开发指南

随着互联网技术的发展&#xff0c;越来越多的传统行业开始寻求线上转型&#xff0c;其中就包括婚恋服务。传统的相亲方式已经不能满足现代人快节奏的生活需求&#xff0c;因此&#xff0c;开发一款基于Web的相亲交易系统显得尤为重要开发者h17711347205。本文将详细介绍如何使用…

电气自动化入门05:三相异步电动机的正反转点动控制电路

视频链接&#xff1a;3.2 电工知识&#xff1a;三相异步电动机的正反转点动控制电路_1_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p6&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.断路器及其选型 1.1断路器定义、分类、表示符号 1.2.断路器功能、…

Vision Transform—用于大规模图像分类的Transformers架构

VIT — 用于大规模图像识别的 Transformer 论文题目&#xff1a;AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE。 官方代码&#xff1a;https://github.com/google-research/vision_transformer 引言与概述 Vision Transformer&#xff08;ViT&…

虚拟机vaware中cpu设置跑满大核

首先&#xff0c;大核速度快&#xff0c;并且在资源紧张时大核优先&#xff0c;小核甚至是闲着围观大核跑满。其次&#xff0c;遇到经常切换操作虚拟机和win11的使用场景&#xff0c;切换核心本身也会造成一点卡顿&#xff0c;降低虚拟机里操作流畅度。另外&#xff0c;13代在你…

【linux】4张卡,坏了1张,怎么办?

先禁用这张卡 grub 禁用&#xff0c;防止加载驱动 禁用这张卡的 PCI # 禁用 PCI 设备 0000:b1:00.0 (NVIDIA GPU) ACTION"add", SUBSYSTEM"pci", ATTR{vendor}"0x10de", KERNELS"0000:b1:00.0", RUN"/bin/sh -c echo 0000:b1:00…

vue part 10

vue-resource 在vue1.0时代讲的比较多&#xff0c;是vue.插件库&#xff0c; import vueResource from vue-resourceVue.use(vueResource) 在vc和vm中会多出如下F12代码即&#xff0c;$http:() 他的用法和返回值和axios一模一样&#xff0c;但是不常维护了 插槽 默认插槽 …

11年计算机考研408-数据结构

设执行了k次。 解析&#xff1a; d要第一个出&#xff0c;那么abc先入栈&#xff0c;d入栈然后再出栈&#xff0c;这前面是一个固定的流程&#xff0c;后面就很灵活了&#xff0c;可以ecba&#xff0c;ceba&#xff0c;cbea&#xff0c;cbae。 答案是4个序列。 解析&#xff1a…