首页 > 其他分享 >题解 CF1711B

题解 CF1711B

时间:2022-11-30 09:11:45浏览次数:42  
标签:ch 奇数 题解 删掉 CF1711B 偶数 对数 include

题解 CF1711B

这个题说明了,蛋糕的个数只跟好友的对数有关,跟去的人或者是单个的人的个数是无关的(是不是单个的人去没有蛋糕吃

所以我们就要考虑,怎样才能满足吃掉的蛋糕正好是偶数

我们会发现,这个吃掉的蛋糕数会一定程度跟 m 有关

  • 如果 m 是偶数,那我们就不需要去掉几个人,直接就可以满足条件
  • 如果是奇数,我们就要考虑删掉几个人,这里想一下就会发现,我们删掉一个人或者是删掉两个人一定是可以让删后的对数为偶数的,并且是最优的

所以,现在问题就是如何去选择删哪个或哪些人

  • 如果删掉一个人,因为要保证删完对数为偶数,所以我们删掉的人肯定必须要存在于奇数个对中(偶数-奇数=奇数),从这里面去取最小值

  • 如果删掉两个人,我们也要保证删完之后对数为偶数,所以我们要想怎样删完之后才能使偶数呢?

    也就是这两个人必须是一对的,如果不是一对的,那我们只能考虑删掉一个人存在于奇数个和一个人存在于偶数个,这样显然不如直接选一个人存在于奇数个优,所以我们就要考虑这两个人存在于偶数对数之中,也就是之前没有出现过的情况,为了保证删完为偶数,所以这两个人必须是一对的,也就是这两个点之间有边,并且保证他们相加的度数为偶数

    看图

这里选择删掉 21 ,满足最终的对数为偶数(图3),如果只删 2 会导致,还是为奇数(图2)

// #Tyrue#
#include<map>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}
const int N=1e5+10;
int T,n,m;
int a[N],du[N];
struct Node{
    int x,y;
}edge[N];
int main(){
    T=read();
    while(T--){
        n=read(),m=read();
        for(int i=1;i<=n;i++){
            a[i]=read();
            du[i]=0;
        }
        for(int i=1;i<=m;i++){
            edge[i].x=read(),edge[i].y=read();
            du[edge[i].x]++;
            du[edge[i].y]++;
        }
        if(m%2==0){
            puts("0");
        }else{
            int minn=1e9;
            for(int i=1;i<=m;i++){
                // if(!((du[edge[i].x]+du[edge[i].y])&1)){
                if(du[edge[i].x]&1){
                    minn=min(minn,a[edge[i].x]);
                }
                if(du[edge[i].y]&1){
                    minn=min(minn,a[edge[i].y]);
                }
                if((du[edge[i].x]+du[edge[i].y])%2==0){    
                    minn=min(minn,a[edge[i].x]+a[edge[i].y]);
                }
            }
            printf("%d\n",minn);
        }        
    }
    return 0;
}

标签:ch,奇数,题解,删掉,CF1711B,偶数,对数,include
From: https://www.cnblogs.com/Tyrue-blog/p/16937374.html

相关文章

  • 题解 CF1740D
    CF1740D这个题说实话比\(C\)题要好想/jk,但是我没有在考场上写出来,写出来了但是没交上这个题只需要记录一下终点当前时刻,需要放置下标的棋子(姑且叫它棋子),以及当前棋盘上......
  • Codeforces Round #836 (Div. 2) A-D题解
    比赛链接A、SSeeeeiinnggDDoouubbllee一个字符串的每个字母翻倍,且没有其他限制。所以把字符串正着输一遍,再倒叙输出一遍即可。点击查看代码#include<bits/stdc++.h>......
  • 【题解】 P8287 「DAOI R1」Flame
    题面传送门解决思路本题解是对这篇题解部分内容的补充,讨论的是两种\(\mathcal{O(m\logn)}\)的做法。大体思路都是一样的,先预处理出每一条边需要多少时间后才能连......
  • 2022 ICPC 济南站 L 题题解
    题意给定一棵\(n\)个点有边权的无根树,有\(q\)次询问,每次给定\(l,r\),求\[\min_{l\leu<v\ler}\{\operatorname{dist}(u,v)\}.\]数据范围:\(1\len\le2\times10^5......
  • 「题解」Codeforces 1765L Project Manager
    写了两个小时写吐了,你告诉我这玩意2400?如果不管假期的话,那么每一周必然会有一个项目跟进一次进度。那么答案就是线性的。即使有假期的存在也没关系,每个假期顶多就只会拖......
  • angular FormArray 中嵌套 FormGroup 问题解决
    官方例子里说了FormArray可以嵌套group或者array,但只给了control的实例,这里记录一下嵌套groupts文件:import { Component } from '@angular/core';import { For......
  • NOIP 2022 题解
    rp++juruo的noip真实成绩:0+0+0+0=0pts.题目大意洛谷有,这里就不放了。T1.种花可以维护每一个点向下最多延伸多长$xia_i$,向右延伸最多多长$you_i$,这样C就好求了,可以维......
  • 题解 P4448
    如果这不是一道原题,这道题出的还不错,是个比较毒瘤的数数。由于我太菜了反正我自己没有做出来后面的dp,zyf巨佬教的。不过听说合肥六中某巨佬当年也没做出来,平衡了雾但问......
  • AT_otemae2019_a 寝坊だ!ピ太郎! (You overslept, Pitaro) 题解
    题目大意:给出两个数 a,b 如果 a+0.5>b,输出 1,否则输出 0。a,b 均为整数。思路:这是一道模拟题,模拟即可。代码:注意:要开浮点型!#include<bits/stdc++.h>using......
  • CF1119E Pavel and Triangles 题解
    题面PavelandTriangles题面翻译给定n种木棍,第i+1种有ai​个,长度为2^i,求用这些木棍可以同时拼出多少个三角形(不可重复使用同一根)输入第一行n,第二行n个整数a0,a1,a2.........