ZOJ 1525 解题报告

ZOJ 1525 解题报告
根据二分图的性质,最小结点覆盖=结点数-最大匹配数.
Code
 1#include <iostream>
 2using namespace std;
 3
 4const int M = 121;
 5int rlink[M];
 6bool g[M][M];
 7bool visited[M];
 8
 9int intersections, streets;
10
11bool Search(int pos)
12{
13    for(int i = 1; i <= intersections; ++i)
14    {
15        if(!visited[i] && g[pos][i])
16        {
17            visited[i] = true;
18            if(rlink[i] == -1 || Search(rlink[i]))
19            {
20                rlink[i] = pos;
21                return true;
22            }

23        }

24    }

25
26    return false;
27}

28
29int _tmain(int argc, _TCHAR* argv[])
30{
31    int cases;
32    cin >> cases;
33    while(cases--)
34    {
35        cin >> intersections >> streets;
36
37        memset(g, falsesizeof(g));
38        memset(rlink, -1sizeof(rlink));
39
40        int start, end;
41        for(int i = 0; i < streets; ++i)
42        {
43            cin >> start >> end;
44            g[start][end] = true;
45        }

46
47        int result = 0;
48
49        for(int i = 1; i <= intersections; ++i)
50        {
51            memset(visited, falsesizeof(visited));
52
53            if(Search(i))
54                ++result;
55        }

56
57        cout << intersections - result << endl;
58    }

59    return 0;
60}

61
62

你可能感兴趣的:(ZOJ 1525 解题报告)