http://acm.hdu.edu.cn/showproblem.php?pid=1083 做做水题~~~~ #include<iostream> using namespace std; #define N 101 #define M 301 int head[M]; bool h[M]; int pre[M]; int NE; struct node { int v,next; node(){}; node(int a,int b):next(a),v(b){}; }E[N*M]; void insert(int u,int v) { E[NE]=node(head[u],v); head[u]=NE++; } bool dfs(int u) { for(int i=head[u];i!=-1;i=E[i].next) { int v=E[i].v; if(!h[v]) { h[v]=1; if(pre[v]==-1||dfs(pre[v])) { pre[v]=u; return true; } } } return false; } int main(void) { int t; int n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(head,-1,sizeof(head)); memset(pre,-1,sizeof(pre)); NE=0; for(int i=1;i<=n;i++) { int mm; scanf("%d",&mm); while(mm--) { int x; scanf("%d",&x); insert(i,x); } } int ans=0; for(int i=1;i<=n;i++) { memset(h,0,sizeof(h)); if(dfs(i)) ans++; } if(ans==n) printf("YES/n"); else printf("NO/n"); } } 注意数组的大小就好~