测试数据和说好的不一样啊
怎么能不输出字典序最小的方案
写了那么仔细还看了好多遍 还是给坑WA了两次
在此深深对出题人(出数据人)表示深深的 鄙弃biqi
好了,,这是二分图匹配
裸匈牙利 (貌似模板就是最好的说明了)
#include <cstring>
#include <cstdio>
#define cle(a,b) memset(a,b,sizeof a)
#define L(i,j,k) for(int i = j;i <= k;i++)
int n,m,k,t,ans;
int e[1001][5001];
int o[5001],vis[1001],match[1001];
void read () {
scanf("%d",&n);
L(i,1,n) {
scanf("%d",&k);
L(j,1,k)
e[i][scanf("%d",&t),t] = 1;
}
scanf("%d",&m);
L(i,1,m)
o[scanf("%d",&t),t] = 1;
}
bool find (int u) {
L(i,1,n) {
if(e[i][u] && !vis[i]) {
vis[i] = 1;
if(!match[i] || find(match[i])) {
match[i] = u;
return 1;
}
}
}
return 0;
}
int main () {
read();
L(i,1,5000) {
if(!o[i])
continue;
cle(vis,0);
if(find(i))
ans++;
}
printf("%d\n",ans);
}