?? 1469 courses.cpp
字號:
#include <memory.h>
#include <stdio.h>
//分別定義左右最大元素
#define LEFT_MAX 101
#define RIGHT_MAX 301
bool useif[RIGHT_MAX];
//link[]記錄與右邊元素連接的元素,-1表示沒有連接
int link[RIGHT_MAX];
//定義左右兩邊元素
int left_num,right_num;
//array定義左右兩邊元素是否有連接
bool array[LEFT_MAX][RIGHT_MAX];
bool can(int t)
{
int i;
for(i = 0;i < right_num; i++)
{
if(!useif[i]&&array[t][i])
{
useif[i]=true;
if(link[i]==-1||can(link[i]))
{
link[i]=t;
return true;
}
}
}
return false;
}
int main()
{
int i,j,k,num;int set;int p,n;
scanf("%d",&set);
while(set--)
{
scanf("%d%d",&p,&n);
memset(link,-1,sizeof(link));
memset(array,0,sizeof(array));
left_num = p; right_num = n;
for(i = 0;i < p;i++)
{ int t;
scanf("%d",&t);
for(j = 0;j < t;j++)
{ scanf("%d",&k);
array[i][k-1] = true;
}
}
num = 0;
//匹配,num為結果
for(i = 0;i < left_num; i++)
{
memset(useif,0,sizeof(useif));
if(can(i)) num++;
}
if(num == p) printf("YES\n");
else printf("NO\n");
}
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -