zoukankan      html  css  js  c++  java
  • 洛谷 P2071 座位安排(二分图匹配)

    传送门


    解题思路

    把人当做A类,把座位当做B类,然后二分图匹配,注意所有的数组从一维变成了a[][2],因为每一排有两个座位。

    也可以分开求或者每一条边都分解成两条。

    AC代码

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 int n,ans,vis[2005][2],ok[2005][2];
     5 int m[4005][2];
     6 bool check(int u){
     7     for(int i=0;i<=1;i++){
     8         int v=m[u][i];
     9         for(int j=0;j<=1;j++){
    10             if(vis[v][j]) continue;
    11             vis[v][j]=1;
    12             if(!ok[v][j]||check(ok[v][j])){
    13                 ok[v][j]=u;
    14                 return true;
    15             }
    16         }
    17     }
    18     return false;
    19 }
    20 int main(){
    21     cin>>n;
    22     for(int i=1;i<=2*n;i++){
    23         cin>>m[i][0]>>m[i][1];
    24     }
    25     for(int i=1;i<=2*n;i++){
    26         memset(vis,0,sizeof(vis));
    27         if(check(i)) ans++;
    28     }
    29     cout<<ans;
    30     return 0;
    31 }
  • 相关阅读:
    vpp编写plugin
    vrf 命令
    vxlan + 多个vrf
    dpdk helloworld
    Go函数高级
    Go_defer
    Go递归函数
    Go作用域
    Go函数
    Go字符串
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/12241708.html
Copyright © 2011-2022 走看看