codeforces 1269D. Domino for Young (二分图证明/结论题)

链接:https://codeforces.com/contest/1269/problem/D

题意:给一个不规则的网格,在上面放置多米诺骨牌,多米诺骨牌长度要么是1x2,要么是2x1大小,问最多放置多米诺骨牌的数量。

思路:首先这是一个结论题,对每个方格进行染色,一个方格染黑色,周围邻近的就染白色,答案就是黑色方格数量和白色方格数量的最小值。这个结论可以用二分图进行证明:把问题抽象成最大二分图匹配,每两个点之间连一条边。一个格子和周围格子连一条边,如果一个格子周围的还没被匹配,那么匹配数+1。如果一个格子周围已经全部被匹配完,那么该格子可以增广到任意一个为匹配位置,匹配数+1。所以只要在另一种颜色格子数量充沛的情况下,每一次匹配都能对匹配数贡献1,所以答案就是两种颜色的最小值。

AC代码:

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<algorithm>
 7 #include<cmath>
 8 using namespace std;
 9 typedef long long ll;
10 ll mod = 1e9+7;
11 const int maxn = 2e5+10;
12 struct node{
13     int dif;
14     int ti;
15 }g[maxn];
16 bool cmp(node a,node b){
17     if(a.ti !=b.ti ) return a.ti<b.ti ;
18     return a.dif <b.dif ;
19 }
20 bool check(ll x){
21     for(int i = 2;i<=sqrt(x);i++){
22         if(x%i == 0) return true;
23     }
24     return false;
25 }
26 int main(){
27     ll black = 0 , white = 0;
28     int n;cin>>n;
29     int cur = 0;
30     for(int i = 0;i<n;i++){
31         ll a ;cin>>a;
32         if(cur == 0){
33             black +=(a/2+a%2);
34             white +=a/2;
35             cur = 1;
36         }
37         else{
38             cur = 0;
39             black +=a/2;
40             white +=(a/2+a%2);
41         }
42     }
43     ll ans = min(black,white);
44     cout<<ans;
45     return 0;
46 }

原文地址:https://www.cnblogs.com/AaronChang/p/12147550.html

时间: 2024-08-29 06:27:12

codeforces 1269D. Domino for Young (二分图证明/结论题)的相关文章

【bzoj2079】[Poi2010]Guilds 构造结论题

题目描述 Zy皇帝面临一个严峻的问题,两个互相抵触的贸易团体,YYD工会和FSR工会,他们在同一时间请求在王国各个城市开办自己的办事处.这里有n个城市,其中有一些以双向马路相连,这两个工会要求每个城市应该做到: 1:有这个工会的办事处或 2:和另外一个符合1条件的城市有马路直接相连.(也就是每个城市必须是YYD的公会,但是又和FSR的公会的城市相连,或者是FSR的,和YYD的城市相连,或者和两个工会的城市相连)但是Zy怀疑不正当的竞争,他担心一个城市有两个工会的办事处,(就是说一个城市不能有两个

【BZOJ4378】[POI2015]Logistyka【树状数组】【结论题】

[题目链接] 题解: 首先得有一个结论:设个数大于s的数字有k个(如果k大于c,显然是TAK.这里讨论k <= c),那么如果个数小于s的数字和不小于(c - k) * s,那么一定有解. 并不会证明... 用树状数组记录一下数字的个数以及数字的数字和,然后判断就可以了. 复杂度: 时间复杂度:O(mlogm),空间复杂度:O(m). 1A. GET: 结论题... /* Telekinetic Forest Guard */ #include <cstdio> #include <

沙雕打表结论题

没有链接 描述: 给p,q,求a^2+b^2 = p*q解的个数,p,q是素数 沙雕打表结论题 然后怼了3h吼爆零 题解 首先这是个结论题 然后这是证明 代码 #include <stdio.h> #include <algorithm> using namespace std; int p , q; int ans; void work () { scanf ( "%d%d" , &p , &q ); if ( p > q ) swap

[codevs5578][咸鱼]tarjan/结论题

5578 咸鱼 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都建立了城市.然而,由于河流有单一的流向,而咸鱼们却没有发达的下体,所以只能顺流而下.两两河流之间的流向互不影响. 现在,咸鱼冒险家Sorey决定出发去看看这个世界,但是Sorey担心自己可能被困在某个城市而无法回归自己的家乡.于是Sorey夜观天象,搞清楚了每条河的流向,他想请你帮他判断他的旅途是否会顺利.

[bzoj1369][Baltic2003]Gem_树形dp_结论题

Gem bzoj-1369 Baltic-2003 题目大意:给你一棵树,让你往节点上添自然数,使得任意相邻节点的数不同且使得权值最小. 注释:n为结点个数,$1\le n\le 10^3$. 想法:呵呵,学长一直在骂结论题,我一直觉得没啥.. ... 知道tm碰见这玩意儿,卧槽?! 树上相邻节点不同色,颜色个数最小值至多为logn. 最后,附上丑陋的代码... ... #include <iostream> #include <cstring> #include <cstd

Codeforces 1009G Allowed Letters FMT,二分图,二分图匹配,霍尔定理

原文链接https://www.cnblogs.com/zhouzhendong/p/CF1009G.html 题目传送门 - CF1009G 题意 给定一个长度为 $n$ 的字符串 $s$ .并给定 $m$ 条限制,第 $i$ 条限制声明了第 $i$ 个位置的字符可以取的值.如果没有声明表示可以任意取值. 求一个字符串 $s$ 的排列,在满足 $m$ 条限制的同时,使得字典序最小.如果不存在满足限制条件的字符串,则输出 $-1$. $n,m\leq 10^5$,字符集 $ = {'a','b'

CodeForces - 687D: Dividing Kingdom II (二分图&amp;带权并查集)

Long time ago, there was a great kingdom and it was being ruled by The Great Arya and Pari The Great. These two had some problems about the numbers they like, so they decided to divide the great kingdom between themselves. The great kingdom consisted

Codeforces 1093D. Beautiful Graph【二分图染色】+【组合数】

<题目链接> 题目大意: 给你一个无向图(该无向图无自环,且无重边),现在要你给这个无向图的点加权,所加权值可以是1,2,3.给这些点加权之后,要使得任意边的两个端点权值之和为奇数,问总共有多少种可能?结果mod 998244353. 解题分析: 整张图的所有顶点赋权之后,一定分为奇.偶两部分点集,并且,要想使的该图满足条件,任意边的两个端点的奇偶性应该是不同的,所以我们可以用DFS对图进行二分图染色,将图分为两个部分,需要注意的是,该图未必连通.然后就是DFS的过程中,如果下一个点已经染过色

D. Domino for Young

基本思想是利用涂色的方法,用黑白两种颜色把方格全部涂色,相邻方格不同色. 方法1:基于二分图匹配的思想 一开始也想过二分图匹配,但数据量太大,就放弃了这种想法.其实根据增广路的定义.如果白色的方格的数量小于黑色方格数量,那么当白色方格还没有匹配完时,一定有黑色的方格没有匹配.那么从该白色的方格出发,一定可以走出一条增广路到达黑色的方格.即数量少的颜色一定可以匹配完.那么只要求出二者数量的最小值即可. 1 #include <bits/stdc++.h> 2 using namespace st