zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    DIV圆角
    ASP.net在线购物商城系统完全解析
    javascript选中一定数量文字触发事件进行分享、转发
    javascript获取2月份天数
    新版JDBC连接SqlServer2005数据库
    一些有用的SQL Server函数
    BI(Business Intelligence)
    CASE运用
    [SQL SERVER] 跨服务器查询
    java 中的 io 系统总结
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12147550.html
Copyright © 2011-2022 走看看