牛客小白月赛96 D 最小连通代价

news/2024/7/5 7:45:29

题目在这里

题意: 加边是所有点连通,没有重边和自环,问最小代价
加边规则:两点权值奇偶性相同代价为a,否则为b
− 100 ≤ a , b ≤ 100 -100\leq a,b \leq100 100a,b100

分析:
这题就是一个分类讨论,先读进来统计奇数点和偶数点
n a na na为奇偶性相同的点的连边, n b nb nb为奇偶性不同的点的连边, j i ji ji为奇数点, o u ou ou为偶数点
1. a ≤ 0 1.a\leq 0 1.a0 and b ≤ 0 : b\leq0: b0:
所有可以连的边都连上
n a = C ( 2 j i ) + C ( 2 o u ) na=C\binom{2}{ji}+C\binom{2}{ou} na=C(ji2)+C(ou2)
n b = j i ∗ o u nb=ji*ou nb=jiou

2. a ≤ 0 2.a\leq 0 2.a0 and b > 0 : b>0: b>0:
n a = C ( 2 j i ) + C ( 2 o u ) na=C\binom{2}{ji}+C\binom{2}{ou} na=C(ji2)+C(ou2)
如果全是技术点或者偶数点,则不需要奇数点和偶数点连一条边
i f ( m i n ( j i , o u ) ) n b = 1 ; if(min(ji,ou)) nb = 1; if(min(ji,ou))nb=1;

3. a > 0 3.a> 0 3.a>0 and b ≤ 0 : b\leq0: b0:
如果既有奇数点又有偶数点,则它们之间的所有边都要,否则我只要n-1条边因为代价大于0
i f ( m i n ( j i , o u ) ) if(min(ji,ou)) if(min(ji,ou)) n b = j i ∗ o u ; nb = ji*ou; nb=jiou;
e l s e else else n a = n − 1 ; na = n-1; na=n1;

4. a > 0 4.a> 0 4.a>0 and b > 0 : b>0: b>0:
如果全是奇数或者偶数点,只取n-1条边即可
否则:
如果a<=b: n a = n − 2 ; na = n-2; na=n2; n b = 1 nb = 1 nb=1
如果a>b: n b = n − 1 nb = n-1 nb=n1即可

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
using i128 = __int128;
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

int n,a,b;
void solve(){
    cin>>n>>a>>b;
    long long ji = 0,ou = 0;
    for(int i = 1;i<=n;++i){
        int x;cin>>x;
        ji+=(x%2==1);
        ou+=(x%2==0);
    }
    long long na = 0,nb =0;
    if(a<=0&&b<=0){
        na = ji*(ji-1)/2+ou*(ou-1)/2;
        nb = ji*ou;
    }else if(a<=0){
        na = (ji-1)*ji/2+ou*(ou-1)/2;
        if(min(ji,ou)) nb = 1;
    }else if(b<=0){
        if(min(ji,ou)) nb = ji*ou;
        else na = n-1;
    }else{
        if(min(ji,ou)==0){
            na = n-1;
        }else{
            if(a<=b){
                na = n-2;
                nb = 1;
            }else nb = n-1;
        }
    }
    cout<<na*a+nb*b<<"\n";
}

int main(){
    ios;
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

没开long long WA了好几发


http://lihuaxi.xjx100.cn/news/2215817.html

相关文章

Temu跨境电商按关键字搜索Temu商品API的应用及接口请求示例

Temu跨境电商按关键字搜索Temu商品API的应用场景 Temu跨境电商平台按关键字搜索Temu商品API的主要应用场景包括但不限于以下几个方面&#xff1a; 用户搜索商品&#xff1a;当用户在Temu平台上输入关键字搜索商品时&#xff0c;API会根据输入的关键字返回与之相关的商品列表&a…

Spring框架的原理及应用详解(五)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;随着应用复杂性的不断增加和技术的快速发展&#xff0c;传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此&#xff0c;开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

【杂记-浅谈以太网IP数据帧】

一、以太网数据帧 以太网数据帧是网络通信的基础单元&#xff0c;遵循IEEE 802.3标准&#xff0c;用于在以太网中传输数据。一个典型的以太网数据帧包括前导码、帧开始符、目的MAC地址、源MAC地址、类型或长度字段、数据载荷和帧校验序列。其中&#xff0c;类型字段指明了上层…

Scala网络编程:代理设置与Curl库应用实例

在网络编程的世界里&#xff0c;Scala以其强大的并发模型和函数式编程特性&#xff0c;成为了开发者的得力助手。然而&#xff0c;网络请求往往需要通过代理服务器进行&#xff0c;以满足企业安全策略或访问控制的需求。本文将深入探讨如何在Scala中使用Curl库进行网络编程&…

SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程

前言 Spring Boot 项目启动时会在控制台打印出一个 banner&#xff0c;下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…

嵌入式实训day5

1、 from machine import Pin import time # 定义按键引脚控制对象 key1 Pin(27,Pin.IN, Pin.PULL UP) key2 Pin(26,Pin.IN, Pin.PULL UP)led1 Pin(15,Pin.ouT, value0) led2 Pin(2,Pin.ouT, value0) led3 Pin(0,Pin.ouT, value0) # 定义key1按键中断处理函数 def key1 ir…

区块链之快照

定义 区块链快照是区块链技术中一个非常重要的概念,它可以帮助区块链系统提高性能和数据管理效率。 什么是区块链快照 区块链快照是指在某个时间点对整个区块链的状态进行保存和备份的过程。 快照会记录区块链上所有账户的余额、合约状态等信息,并将其序列化存储起来。 这样…

Python学习笔记14 -- 小项目 - 简易机器人

一、helloFunction.py文件的说明 1、功能&#xff1a; 包含该机器人所有用到的函数 -- 为了代码的可读性和标准性 不将实现功能的代码直接写在主函数里&#xff0c;而是新建一个python文件&#xff0c;专门写函数 只在main函数里引用 2、具体代码及说明&#xff1a; 1&am…