zoukankan      html  css  js  c++  java
  • 【AtCoder Regular Contest 092】C.2D Plane 2N Points【匈牙利算法】

    C.2D Plane 2N Points

    题意:给定N个红点二维坐标N个蓝点二维坐标,如果红点横纵坐标都比蓝点小,那么它们能够构成一组。问最多能构成多少组。

    题解:把满足要求的红蓝点连线,然后就是匈牙利算法(详情见这里,写的好棒!)

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn=160;
     7 int a[maxn],b[maxn],c[maxn],d[maxn];
     8 bool used[maxn];
     9 int girl[maxn],line[maxn][maxn];
    10 int n;
    11 
    12 bool Find(int x)
    13 {
    14     for(int j=1;j<=n;j++)
    15     {
    16         if(line[x][j]&&!used[j]){
    17             used[j]=1;
    18             if(girl[j]==0||Find(girl[j])){
    19                 girl[j]=x;
    20                 return true;
    21             }
    22         }
    23     }
    24     return false;
    25 }
    26 
    27 int main()
    28 {
    29     cin>>n;
    30     for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
    31     for(int i=1;i<=n;i++) cin>>c[i]>>d[i];
    32     memset(line,0,sizeof(line));
    33     for(int i=1;i<=n;i++)
    34     {
    35         for(int j=1;j<=n;j++){
    36             if((a[i]<c[j])&&(b[i]<d[j])){
    37                 line[i][j]=1;
    38             }
    39         }
    40     }
    41     memset(girl,0,sizeof(girl));
    42     int ans=0;
    43     for(int i=1;i<=n;i++){
    44         memset(used,0,sizeof(used));
    45         if(Find(i)) ans++;
    46     }
    47     cout<<ans<<endl;
    48     return 0;
    49 }
  • 相关阅读:
    技术晨读_2015_11_29
    mysql的timeout
    Gradle目录解析
    flexbox简介
    elasticsearch 查询(match和term)
    内存那些事
    elasticsearch 文档
    elasticsearch 集群
    elasticsearch中的API
    小菜的程序员道路(三)
  • 原文地址:https://www.cnblogs.com/zxhyxiao/p/8596925.html
Copyright © 2011-2022 走看看