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

题目在这里

题意: 加边是所有点连通,没有重边和自环,问最小代价
加边规则:两点权值奇偶性相同代价为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了好几发

相关推荐

  1. 96 D 连通代价

    2024-06-17 04:32:03       29 阅读
  2. 96 C-多数组的数量

    2024-06-17 04:32:03       25 阅读
  3. 92题解

    2024-06-17 04:32:03       32 阅读
  4. 83

    2024-06-17 04:32:03       62 阅读
  5. 84

    2024-06-17 04:32:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 04:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 04:32:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 04:32:03       82 阅读
  4. Python语言-面向对象

    2024-06-17 04:32:03       91 阅读

热门阅读

  1. 漏斗限流(leaky bucket)

    2024-06-17 04:32:03       32 阅读
  2. pytest + yaml 框架 -62.支持yaml和json2种格式用例

    2024-06-17 04:32:03       30 阅读
  3. 【微信小程序 事件绑定】

    2024-06-17 04:32:03       23 阅读
  4. 写在前面的话

    2024-06-17 04:32:03       31 阅读
  5. pdf.js实现web h5预览pdf文件(兼容低版本浏览器)

    2024-06-17 04:32:03       21 阅读
  6. 回调函数-python-chatgpt4-Memory

    2024-06-17 04:32:03       26 阅读
  7. mysql在linux下安装与配置

    2024-06-17 04:32:03       28 阅读
  8. OPPO-HR面笔记

    2024-06-17 04:32:03       31 阅读
  9. js 实现图片纵向拼接并下载

    2024-06-17 04:32:03       32 阅读
  10. 窗口信息保存

    2024-06-17 04:32:03       27 阅读
  11. DllPlugin

    2024-06-17 04:32:03       26 阅读