博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1059 [ZJOI2007]矩阵游戏
阅读量:4317 次
发布时间:2019-06-06

本文共 1336 字,大约阅读时间需要 4 分钟。

题目描述

HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。

输入格式:

第一行包含一个整数T,表示数据的组数。

接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

输出格式:

包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

 

因为同行同列的点无论怎么交换都是同行或同列,所以只要找到是否有n个不同行不同列的点就可以了,匈牙利或者网络流都可以。

#include
#include
#include
#include
using namespace std;#define maxn 205int map[maxn][maxn];int link[maxn];bool vis[maxn];int n,m,T;bool dfs(int x){ for(int i=1;i<=n;i++){ if(map[x][i]&&!vis[i]){ vis[i]=1; if(!link[i]||dfs(link[i])){ link[i]=x; return 1; } } } return 0;}int main(){ scanf("%d",&T); while(T--){ int ans=0; scanf("%d",&n); memset(map,0,sizeof map); memset(link,0,sizeof link); int x; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ scanf("%d",&x); if(x)map[i][j]=1; } for(int i=1;i<=n;i++){ memset(vis,0,sizeof vis); if(dfs(i))ans++; } if(ans==n)puts("Yes"); else puts("No"); }}

 

转载于:https://www.cnblogs.com/Elfish/p/8260808.html

你可能感兴趣的文章
2019年2月
查看>>
Google Noto Sans CJK 字体
查看>>
ES集群性能调优链接汇总
查看>>
STL库的应用
查看>>
spark算子
查看>>
(转)Linux服务器SNMP常用OID
查看>>
zoj2112 主席树动态第k大 ( 参考资料链接)
查看>>
弹出框popupWindow
查看>>
Python学习(007)-函数的特性
查看>>
扑克牌的顺子
查看>>
nodejs + express 热更新
查看>>
ClientScriptManager.RegisterClientScriptBlock Method 无效
查看>>
asp.net web site中reference的version的autoupdate
查看>>
第4章 网络层
查看>>
volatile
查看>>
项目需求分析答辩总结
查看>>
mysql-6正则表达式
查看>>
廖雪峰Java2面向对象编程-5包和classpath-1包package
查看>>
廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime
查看>>
利用golang语法检查对象是否实现了接口
查看>>