首页 > 其他分享 >Codeforces Round 810 (Div. 2)

Codeforces Round 810 (Div. 2)

时间:2023-12-13 15:46:07浏览次数:49  
标签:度数 删除 int Codeforces 偶数 条边 两点 810 Div

基本情况

A题秒了,B、C题死活看不懂题目。

B. Party

Problem - B - Codeforces

错误分析

为啥看不懂题目,一方面是英语水平确实不够,另一方面就是的意识不行,如果能看出来这题隐含的建图思想,就很有助于理解题目。


正确思路

题意

有 \(T\) 组数据,每组数据给你一组 \(n, m\) 表示共有 \(n\) 个人,\(m\) 组朋友关系,及一个数组 \(a\) 和 \(m\) 组关系的具体值。其中 \(a_i\) 表示当第 \(i\) 人没有来参加聚会时,所带来的不快乐值。每对朋友会吃掉一个蛋糕。问在保证吃的蛋糕总数为偶数时,能达到的最小不快乐值。

转化

对于朋友关系及每个人,我们考虑建一个 \(n\) 个顶点,\(m\) 条边的无向图。其中的 \(n\) 个顶点分别为 \(1 \sim n\) 个人,\(m\) 条边为其中的 \(m\) 条朋友关系,即若两人有朋友关系,我们就在所建的图中编号对应的两点间连上一条无向边。

那么,问题就转换为了:

给出一个包含 \(n\) 个点 \(m\) 条边的图,及每个点的点权(\(a\) 数组)。删掉一些点和有关的边,使得图中有偶数条边。求删掉的点的点权总和最小值。

方法

我们分类讨论一下。

  1. \(m\) 为偶数,则不需要删边或点,直接输出 \(0\) 即可。

  2. \(m\) 为奇数,以下分三种情况讨论。

    1. 删一个点。显然,我们只能选择一个度为奇数的点。

    2. 删两个点。以下再分六种情况来讨论。

      1. 两点度数均为偶且有边,那么能够保证删除后边为偶数个,则两点均删除。
      2. 两点度数均为奇且有边,那么能够保证删除后边为偶数个,则两点均删除。
      3. 两点度数一奇一偶但无边,如下图。

      虽然能够保证删除后边为偶数个,但只删除其中的奇点 \(4\) 所获的不快乐值一定会更小,那么舍去这种情况。

      1. 对于上述三种情况下,若两点间有无边的条件相反的情况下,则删除后对边数的改变都是减少偶数条。如下图中删 \(1\),\(4\) 或 \(5\),\(7\) 或 \(3\),\(4\) 号点,对边数变化为偶数无用,所以也舍去这三种情况。

    3. 删大于等于三个点。显然不会更优,也舍去(可以替换成只删一个或两个点的形式,不快乐值会更低)。

      如下图

      若要删除 \(5\),\(6\),\(1\) 号顶点,我们可以替换为只删除 \(1\) 号点,也能使图中的边数边为偶数,且不快乐值更低。
      若要删除 \(1\),\(2\),\(3\),\(4\) 号顶点,我们可以转化为只删除其中的任意一个奇点。

      • 而若要删除更多的点,我们只需要替换为只删一个或两个点就行。

代码

我们发现不用把图建出来,记录每个点的度数即可。

const int N = 1e5 + 10;
int n, m;
int d[N], a[N];
int u[N], v[N];

void solve()
{
	int ans = 0x7fffffff;
	std::cin >> n >> m;
	for (int i = 1; i <= n; i++) std::cin >> a[i], d[i] = 0;
	for (int i = 1; i <= m; i++) std::cin >> u[i] >> v[i], d[u[i]]++, d[v[i]]++;
	if ((m & 1) == 0) {std::cout << "0\n"; return ;}//边数为偶数
    //边数为奇数
	for (int i = 1; i <= n; i++) if (d[i] & 1) ans = ans < a[i] ? ans : a[i];//入读为奇数的点可以直接删除这一个点(等价于删了奇数条边,边数又能回到偶数)
	for (int i = 1; i <= m; i++) if ((d[u[i]] + d[v[i]] & 1) == 0) ans = ans < a[u[i]] + a[v[i]] ? ans : a[u[i]] + a[v[i]];//如上文讨论
	std::cout << ans << std::endl; 
}

标签:度数,删除,int,Codeforces,偶数,条边,两点,810,Div
From: https://www.cnblogs.com/kdlyh/p/17898968.html

相关文章

  • [Codeforces] CF1737C Ela and Crickets
    CF1737CElaandCrickets题意给定一个\(n\timesn\)的棋盘,棋盘上有且仅有三颗排成\(\text{L}\)形的棋子。对于\(\text{L}\)形的定义,有且仅有以下四种情况:棋子的移动规则和跳棋相同。它可以水平、垂直或斜向移动。当且仅当一个棋子的某个方向紧随另一个棋子时,它能跳......
  • [ARC133B] Dividing Subsequence
    DividingSubsequence这道题与最长公共子序列类似,可以先去水一水那道题。题意本题就是让你从\(p\)里面选出一个子序列\(b_i\)和\(q\)里面选出一个子序列\(a_i\),我们要使\(b_i\)是\(a_i\)的倍数。解法本题直接用动态规划,是\(O(n^2)\)做法,会超时,因此我们用树状数......
  • Codeforces Round 809 (Div. 2)
    基本情况A题秒了。B题卡了很久,最后过了。C来不及了。B.MakingTowersProblem-B-Codeforces卡题分析最初想法其实已经推出来下标差为奇数才能构成高塔了。但是思维固化,认为这个问题就必须用LIS那类做法做,然后硬打了一个\(\operatornameO(n^2)\)的DP,然后就TLE......
  • Codeforces Round 808 (Div. 2)
    基本情况最难受的一集。A搞了一个半小时愣是没开出来。A.DifferenceOperationsProblem-A-Codeforces错误分析我分了好多类讨论,换言之没找到更本质的东西。我想的是如果前面有一个数能处理到\(1\)那后面就都能过。止步于此,而没有往更本质,更普适的地方想。然后又......
  • Codeforces Round 807 (Div. 2)
    基本情况AB题秒了。C题搞了半天,搞了一个假的解法,最后还是爆空间了。D题没想下去。C.MarkandHisUnfinishedEssayProblem-C-Codeforces错误分析写出来自己的错解之后没有进一步思考,而是觉得没希望直接做D去了,实则D也没可能半小时写完。我的错解就是预处理好每个......
  • Codeforces 198 B Jumping on Walls
    题面翻译题目描述瓦西亚在和忍者玩电脑游戏。在这个关卡,瓦西亚需要操控忍者走出一个很深的峡谷。峡谷由两面垂直于地面且互相平行的墙组成,它们的高度为\(n\)米。我们将这些墙分成许多\(1\)米长的区域,并从下到上用\(1\)到\(n\)的正整数对它们进行编号。有些地方是安全的,忍者可以......
  • Codeforces Round 914 (Div. 2)
    基本情况A题+2,幸好后面突然悟了。B题体现了读题以及一词多义的重要性。C题不会。看了一下1700分的题目,暂时先放了。A.TheThirdThreeNumberProblemProblem-A-Codeforces推出了规律,\(n\)为偶数的时候,无脑\(a=n\oplus1,b=n\oplus1,c=1\)就行。然而奇数......
  • Codeforces Round 914 (Div. 2)
    CodeforcesRound914(Div.2)A-Forked!解题思路:枚举皇后和国王能被骑士吃到的位置,重合的点数就是答案。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;typedefpair<ll,ll>pii;#definefifirst#definesesecondconstintmod=1e9......
  • 232-父级div,包含子div,子div有点击事件,父div有点击事件,js如何实现,2个点击事件不干扰
    HTML结构<divid="parent"><divid="child"></div></div>JavaScript/jQuery代码:$(document).ready(function(){//父级div的点击事件处理程序$('#parent').on('click',function(){console.log(&#......
  • php 去除图片以及DIV的width、height、style
    1.去掉图片的宽高,去掉DIV的style样式$str='<divstyle="margin:0pxauto;width:740px;"><p><imgwidth="748"height="444"alt=""src="/images/upload/Image/manmiao_0001.jpg"/></p></div......