BZOJ P1059[ZJOI2007]矩阵游戏

来源:互联网 发布:photoshop破解补丁mac 编辑:程序博客网 时间:2024/05/22 10:40

怎么说呢,其实有一点非常显然

只要有n个点,他们的横纵坐标互不相等那么显然是可行的

但是如何判断呢?引入一个叫做二分图匹配的东西

也就是每一个横坐标都要匹配一个纵坐标,这样才可以使得横纵坐标互不相等

然后我用的是匈牙利算法

下面是代码

#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int n;int map[203][203];int used[203],girl[203];bool _find(int x){for(int i=1;i<=n;i++){if(map[x][i]&&!used[i]){used[i]=1;if(!girl[i]||_find(girl[i])){girl[i]=x;return true;}}}return false;}bool _is(){memset(girl,0,sizeof(girl));memset(used,0,sizeof(used));for(int i=1;i<=n;i++){memset(used,0,sizeof(used));if(!_find(i)){return false;}}return true;}int main(){int T;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>map[i][j];}}if(_is()){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}return 0;}/*in:220 00 130 0 10 1 01 0 0out:NoYes*/


0 0