大致题意:
给出一个n*n的矩阵,每个矩阵元素的U或者是D。
例如
DUD
UDD
DDU
每次操作,可以交换任意两行或者两列。求是否能使得其主对角线上的元素全部变成U。
大致思路:
仔细思考就能发现,问题可以转化为,能否找出n个‘U’,使得他们之间两两的行数和列数都不相同。于是就很容易就能构造出二分匹配模型了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int nMax=1005;
int n,m;
long long num[nMax];
bool map[nMax][nMax];
bool vis[nMax];
int linkk[nMax];
int dfs(int s){
for(int i=1;i<=m;i++){
if(!vis[i]&&map[s][i]){
vis[i]=1;
if(linkk[i]==-1||dfs(linkk[i])){
linkk[i]=s;
return 1;
}
}
}
return 0;
}
char str[nMax][nMax];
int main(){
int cas,i,j;
while(cin>>n){
m=n;
memset(map,0,sizeof(map));
for(i=1;i<=n;i++)
{
cin>>str[i]+1;
for(j=1;j<=n;j++)
{
if(str[i][j]=='U')
{
map[i][j]=1;
}
}
}
int ans=0;
memset(linkk,-1,sizeof(linkk));
for(i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(dfs(i))ans++;
}
if(ans==n)
{
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}
return 0;
}
分享到:
相关推荐
zoj 2316 Matrix Multiplication.md
学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路
ZOJ解题报告ZOJ解题报告ZOJ解题报告ZOJ解题报告
浙大ZOJ题目分类,可以让你更方便快速锁定那你想要联系的题目,是自己快速提高·
zoj题目简单归类zoj题目简单归类zoj题目简单归类
acm中zoj1002的可运行C++程序
包含了zoj700多道题目的源代码,在做题时可以参考
Problem Arrangement zoj 3777
ZOJ题目答案源码
其中有pku、hdu、zoj等各大oj的题目分类,pku的oj比较详细一点,按不同算法进行分类,均系从网上自行搜集的。
一个非常非常非常非常实用的zoj结题代码
浙大ACM网上的题目分类,以及部分题目的题解,包括题目,对于没联网的很适用,即使就有网的也很用的,里面有些题解很祥细……
ZOJ1805代码
zoj 1003 c语言的,要写这么多描述吗。。
本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够
zoj1027解题指南和代码,还不错,是学校培训给的。
ZOJ题解集合-截至2835。共1244个文件,C/C++,有重复
zoj 题库 详细解答 解题代码 acm
zoj4041正确题解源代码,以及运行程序
大学ACM竞赛,ZOJ 1733 运用递归(优化)的方法。ac的代码。