zoukankan      html  css  js  c++  java
  • hdu 1151 或 poj 1422 二分图 最小点覆盖集

    最小点覆盖集的裸题,只要“拆点建边”然后求出最大匹配,则:最小点覆盖集的大小 = 点数 - 最大匹配

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int N = 121;
     7 const int M = 5000;
     8 bool visit[N];
     9 int mark[N];
    10 int head[N];
    11 int n, m, e;
    12 
    13 void init()
    14 {
    15     e = 0;
    16     memset( head, -1, sizeof(head) );
    17 }
    18 
    19 struct Edge
    20 {
    21     int v, next;
    22 } edge[M];
    23 
    24 void addEdge( int u, int v )
    25 {
    26     edge[e].v = v;
    27     edge[e].next = head[u];
    28     head[u] = e++;
    29 }
    30 
    31 int dfs( int u )
    32 {
    33     for ( int i = head[u]; i != -1; i = edge[i].next )
    34     {
    35         int v = edge[i].v;
    36         if ( !visit[v] )
    37         {
    38             visit[v] = 1;
    39             if ( mark[v] == -1 || dfs(mark[v]) )
    40             {
    41                 mark[v] = u;
    42                 return 1;
    43             }
    44         }
    45     }
    46     return 0;
    47 }
    48 
    49 int solve()
    50 {
    51     int ans = n;
    52     memset( mark, -1, sizeof(mark) );
    53     for ( int i = 1; i <= n; i++ )
    54     {
    55         memset( visit, 0, sizeof(visit) );
    56         ans -= dfs(i);
    57     }
    58     return ans;
    59 }
    60 
    61 int main ()
    62 {
    63     int t;
    64     scanf("%d", &t);
    65     while ( t-- )
    66     {
    67         scanf("%d%d", &n, &m);
    68         init();
    69         while ( m-- )
    70         {
    71             int a, b;
    72             scanf("%d%d", &a, &b);
    73             addEdge( a, b );
    74         }
    75         printf("%d
    ", solve());
    76     }
    77     return 0;
    78 }

    hdu的数据也太弱了,一开始手误将dfs中的mark[v]写成了v居然都过了,后来交到poj死活过不去才发现是自己写错了,汗。

  • 相关阅读:
    Postman几种常用方式
    PL/SQL 循环结构
    【oracle】解锁oracle用户,unlock
    四则运算题2
    有关Botton的用法(一)
    SQLiteOpenHelper的使用
    用Toast来增加调试效率的小技巧
    汇编语言-比较字符串
    正向代理和反向代理
    redis安装与配置
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4436414.html
Copyright © 2011-2022 走看看