=0) continue; memset(pre 0 sizeof(lm)); memset(rm 0 j; ans = 0; memset(lm c;void hungary(){ int i qe;int x;int ans;int r qs rm[MX];int pre[MX];int qu[MX] n2;int lm[MX] Hungary 的 BFS 实现的模板了:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MX=1001;int bip[MX][MX];int n1 =0) printf("%d " &j sizeof(bip)); for(i=1;i<=c;i++){ scanf("%d %d" 0 &c); memset(bip &r &tn); while(tn--){ scanf("%d %d" k; int tn; scanf("%d" j sizeof(pre)); qs = qe = 0; for(j=1;j<=n2;j++){ if(bip[i][j]){ qu[qe++] = j; pre[j] = -1; } } while(qs<qe){ x = qu[qs]; if(rm[x]==0) break; qs++; for(j=1;j<=n2;j++){ if(bip[rm[x]][j]&&pre[j]==0){ qu[qe++] = j; pre[j] = x; } } } if(qe==qs) continue; while(pre[x]>0){ lm[rm[pre[x]]] = x; rm[x] = rm[pre[x]]; x = pre[x]; } lm[i] = x; rm[x] = i; ans++; }}int main(){ int i 0 sizeof(rm)); for(i=1;i<=n1;i++){ if(lm[i] j); break; } } } } printf("/n"); } else printf("NO/n"); } return 0;} rm[i]); else{ for(j=1;j<=r;j++){ if(bip[j][i]==1){ printf("%d " &k); bip[j][i] = 1; bip[k][i] = 1; } n1 = r; n2 = c; hungary(); if(ans==r) { for(i=1;i<=c;i++){ if(rm[i]