现在的位置: 首页 > 综合 > 正文

1059: [ZJOI2007]矩阵游戏 (二分图匹配)

2018年01月13日 ⁄ 综合 ⁄ 共 543字 ⁄ 字号 评论关闭
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool mp[201][201], y[201];
int lk[201];
int n;

bool find(int x) {
    for (int i = 1; i <= n; i++)
        if (!y[i] && mp[x][i]) {
            y[i] = 1;
            if (!lk[i] || find(lk[i])) {
                lk[i] = x;
                return 1;
            }
        }
    return 0;
}

bool work() {
    for (int i = 1; i <= n; i++) {
        memset(y, 0, sizeof (y));
        if (!find(i))return 0;
    }
    return 1;
}

int main() {
    int p;
    scanf("%d", &p);
    while (p--) {
        memset(lk, 0, sizeof (lk));
        memset(mp, 0, sizeof (mp));
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++) {
                int x;
                scanf("%d", &x);
                if (x)mp[i][j] = 1;
            }
        if (work())printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

抱歉!评论已关闭.