标签:
Courses Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Sample Input
Sample Output
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 5 using namespace std; 6 7 #define N 330 8 9 int p, n, vis[N], used[N], maps[N][N]; 10 11 12 void init() 13 { 14 memset(vis, 0, sizeof(vis)); 15 memset(used, 0, sizeof(used)); 16 memset(maps, 0, sizeof(maps)); 17 } 18 19 int found(int u) 20 { 21 for(int i = 1; i <= n; i++) 22 { 23 if(maps[u][i] && !vis[i]) // 这个学生愿意上这么课, 24 { 25 vis[i] = 1; 26 if(!used[i] || found(used[i])) // 并且这个学生没有代表其他课,或者它代表的课有其他人代表,那么这个人就可以代表这门课 27 { 28 used[i] = u; 29 return true; 30 } 31 } 32 } 33 return false; 34 } 35 36 int main() 37 { 38 int t, q, x; 39 40 scanf("%d", &t); 41 42 while(t--) 43 { 44 init(); 45 46 scanf("%d%d", &p, &n); 47 48 for(int i = 1; i <= p; i++) 49 { 50 scanf("%d", &q); 51 while(q--) 52 { 53 scanf("%d", &x); 54 //used[x] = i; 55 maps[i][x] = 1; // i 这门课被x学生代表 56 } 57 } 58 59 int flag = 0; 60 61 for(int i = 1; i <= p; i++) 62 { 63 memset(vis, 0, sizeof(vis)); 64 65 if(!found(i)) // 如果这门课找不到学生代表,flag=1,break;只要有一门课找不到别人代表,就printf “NO 66 { 67 flag = 1; 68 break; 69 } 70 } 71 if(flag) 72 printf("NO\n"); 73 else 74 puts("YES"); 75 } 76 return 0; 77 }
标签:
原文地址:http://www.cnblogs.com/Tinamei/p/4718722.html