superman

聚精会神搞建设 一心一意谋发展
posts - 190, comments - 17, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ZOJ 1140 - Courses

Posted on 2008-04-22 10:02 superman 阅读(303) 评论(0)  编辑 收藏 引用 所属分类: ZOJ
 1 /* Accepted 1140 C++ 00:07.18 928K */
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int n, m, match[301];
 7 bool map[301][301], visited[301];
 8 
 9 bool dfs(int p)
10 {
11      for(int i = 1; i <= m; i++)
12           if(map[p][i] && visited[i] == false)
13           {
14                visited[i] = true;
15                if(match[i] == 0 || dfs(match[i]))
16                {
17                     match[i] = p;
18                     return true;
19                }
20           }
21      return false;
22 }
23 
24 int main()
25 {
26      int cases; cin >> cases;
27      while(cases--)
28      {
29           memset(map, falsesizeof(map));
30           memset(visited, falsesizeof(visited));
31           memset(match, 0sizeof(match));
32           
33           cin >> n >> m;
34           
35           int cnt, t;
36           for(int s = 1; s <= n; s++)
37           {
38                cin >> cnt;
39                while(cnt--)
40                {
41                     cin >> t;
42                     map[s][t] = true;
43                }
44           }
45           
46           cnt = 0;
47           for(int i = 1; i <= n; i++)
48           {
49                memset(visited, falsesizeof(visited));
50                cnt += dfs(i);
51           }
52           cout << (cnt == n ? "YES" : "NO"<< endl;
53      }
54      
55      return 0;
56 }
57 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理