• 洛谷P2071 座位安排


    题目背景

    公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决。

    题目描述

    已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置。

    输入输出格式

    输入格式:

    第一行,一个正整数N。

    第二行至第N*2+1行,每行两个正整数Si1,Si2,为每个人想坐的排数。

    输出格式:

    一个非负整数,为最多使得多少人满意。

    输入输出样例

    输入样例#1:

    4
    1 2
    1 3
    1 2
    1 3
    1 3
    2 4
    1 3
    2 3
    

    输出样例#1:

    7
    

    说明

    对于10%的数据 N≤10

    对于30%的数据 N≤50

    对于60%的数据 N≤200

    对于100%的数据 N≤2000

    算法提示:二分图的最大匹配

    思路:看完这道题目后第一感觉就是二分图最大匹配,而且题目中也提示了……仔细读题发现,这道题与普通二分图匹配题目唯一的区别在于这道题目第二部分的一个点可以与第一部分的两个点匹配,我们把(link)数组开成二维就好了,分情况讨论一下。

    代码:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cctype>
    #define maxn 4007
    using namespace std;
    int n,link[maxn][2],head[maxn],num,zrj;
    bool vis[maxn];
    inline int qread() {
      char c=getchar();int num=0,f=1;
      for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
      for(;isdigit(c);c=getchar()) num=num*10+c-'0';
      return num*f;
    }
    struct node {
      int v,nxt;
    }e[maxn<<1];
    inline void ct(int u, int v) {
      e[++num].v=v;
      e[num].nxt=head[u];
      head[u]=num;
    } 
    bool dfs(int u) {
      for(int i=head[u];i;i=e[i].nxt) {
        int v=e[i].v;
        if(!vis[v]) {
          vis[v]=1;
          if(!link[v][0]||dfs(link[v][0])) {
            link[v][0]=u;
            return 1;
          }
          if(!link[v][1]||dfs(link[v][1])) {
            link[v][1]=u;
            return 1;
          }
        }
      }
      return 0;
    }
    int main() {
      n=qread();
      for(int i=1,u,v;i<=n<<1;++i) {
        u=qread(),v=qread();
        ct(i,u),ct(i,v);
      }
      for(int i=1;i<=n<<1;++i) {
        memset(vis,0,sizeof(vis));
        if(dfs(i)) ++zrj;
      }
      printf("%d
    ",zrj);
      return 0;
    }
    
  • 相关阅读:
    hbase-15-如何查看HFile
    Hbase-14-MemStore Flush的触发时机
    Hbase-13-MemStore
    【c++】C++中erase的用法
    Redis五种数据结构(转载)
    redis的三种集群方式 (转载)
    hbase和hive的差别是什么,各自适用在什么场景中?(转载)
    vue 数据已经更新了但是页面未更新
    uni-app配置跨域
    覆盖 web-view (uni-app)
  • 原文地址:https://www.cnblogs.com/grcyh/p/10230707.html
Copyright © 2020-2023  润新知