一开始我以为是最小支配集,后来胡乱YY一下,以为最小支配集 == 最大独立数 == N-最大匹配,结果给我胡乱AC了。后来去网上搜搜解题报告才知道是最小路径覆盖。

CODE:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib> 
using namespace std;

#define MAXN 130
#define MAXM 20010

int G[MAXN][MAXN];

int xlink[MAXN];
int ylink[MAXN];
bool vis[MAXN];  

int nx, ny, m;

inline void init()
{
    memset(G, 0sizeof(G));
    memset(xlink, -1sizeof(xlink));
    memset(ylink, -1sizeof(ylink));
}

bool ED(int u)
{
    for(int v = 1; v <= ny; v++) if(G[u][v]) 
    {
        if(!vis[v]) 
        {
            vis[v] = 1;
            if(ylink[v] == -1 || ED(ylink[v])) 
            { 
                xlink[u] = v;
                ylink[v] = u; 
                return true;
            } 
        }
    }
    return false;
}

void MaxMatch()
{
    int ans = 0;
    for(int i = 1; i <= nx; i++)
    {
        if(xlink[i] == -1)
        {
            memset(vis, 0sizeof(vis));
            ans += ED(i);
        }
    }
    printf("%d\n", nx-ans);
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        init();
        scanf("%d%d", &nx, &m);
        ny = nx;
        while(m--)
        {
            int u, v;
            scanf("%d%d", &u, &v);
            G[u][v] = 1;
        }
        MaxMatch();
    }
    return 0;
}

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-09
  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
猜你喜欢
  • 2022-12-23
  • 2021-08-14
  • 2021-11-10
  • 2021-12-23
  • 2021-12-10
  • 2021-06-10
相关资源
相似解决方案