2 条题解

  • 0
    @ 2025-10-8 16:57:30
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 210;
    vector<int> G[N];
    int n, m, match[N], vis[N], tsp;
    bool dfs(int x)
    {
        for(int y : G[x]) if(vis[y] != tsp)
        {
            vis[y] = tsp;
            if(!match[y] || dfs(match[y]))
            {
                match[y] = x;
                return 1;
            }
        }
        return 0;
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d%d", &n, &m);
            memset(G, 0, sizeof(G));
            for(int i = 1, x, y; i <= m; i++)
            {
                scanf("%d%d", &x, &y);
                G[x].push_back(y);
            }       
            int cnt = 0;
            memset(match, 0, sizeof(match));
            memset(vis, 0, sizeof(vis));
            for(int i = 1; i <= n; i++)
            {
                tsp = i;
                if(dfs(i)) cnt++;
            }
            printf("%d\n", n - cnt);
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:57:21
      #include<bits/stdc++.h>
      using namespace std;
      const int N=210;
      vector<int>G[N];
      int n,m,match[N],vis[N],tsp;
      bool dfs(int x)
      {
          for(int y:G[x])if(vis[y]!=tsp)
          {
              vis[y]=tsp;
              if(!match[y]||dfs(match[y]))
              {
                  match[y]=x;
                  return 1;
              }
          }
          return 0;
      }
      int main()
      {
          int T;scanf("%d",&T);
          while(T--)
          {
              scanf("%d%d",&n,&m);
      		memset(G,0,sizeof(G));
              for(int i=1,x,y;i<=m;i++)
              {
                  scanf("%d%d",&x,&y);
                  G[x].push_back(y);
              }       
              int cnt=0;
      		memset(match,0,sizeof(match));
      		memset(vis,0,sizeof(vis));
              for(int i=1;i<=n;i++)
              {
                  tsp=i;
                  if(dfs(i)) cnt++;
              }
              printf("%d\n",n-cnt);
          }
          return 0;
      }
      • 1

      *【二分图:有向无环图的最小路径点覆盖】Air Raid[POJ1422]

      信息

      ID
      1498
      时间
      1000ms
      内存
      64MiB
      难度
      5
      标签
      递交数
      47
      已通过
      20
      上传者