zoukankan      html  css  js  c++  java
  • p2071 座位安排

    传送门

    题目

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

    输入格式:

    第一行,一个正整数N。

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

    输出格式:

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

    N<=2000。

    分析

    以为每排有2个座位,所以在右边建2*n个点代表座位与左边2*n个点所代表的人进行匹配。将每一个人与他所满意的两排共四个座位连边,在这里,第x排的2个座位分别为x和x+n

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    int wh[5000],used[5000],t,n,ans;
    vector<int>v[4001];
    bool work(int x){
          int i,j,k;
          for(i=0;i<v[x].size();i++)
            if(used[v[x][i]]!=t){
              used[v[x][i]]=t;
              if(!wh[v[x][i]]||work(wh[v[x][i]])){
                   wh[v[x][i]]=x;
                   return 1;
                   }
            }
          return 0;
    }
    void go(){
          int i,j,k;
          for(i=1;i<=2*n;i++){
               t=i;
             if(work(i))ans++;
          }
    }
    int main()
    {     int m,i,j,k,x,y;
          cin>>n;
          for(i=1;i<=2*n;i++){
              cin>>x>>y;
              v[i].push_back(x);
              v[i].push_back(x+n);
              v[i].push_back(y);
              v[i].push_back(y+n);
          }
          go();
          cout<<ans<<endl;
          return 0;
    }

  • 相关阅读:
    Django ORM 进行查询操作和性能优化
    Python PIL 长文本换行,二维码,图片合成
    python 常用的资料链接
    人生苦短,我用Python
    windows下搭建Python virtualenvvirtualenvwrapper虚拟环境。
    Python 文件上传base64图片
    python实现中文转换url编码的方法
    同时装了Python3和Python2,怎么用pip?
    统计当天下单量
    Django ORM 级联删除
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9026810.html
Copyright © 2011-2022 走看看