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

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

矩阵快速幂+二分图匹配,

对于对角线上的每个点看看能不能换到就行,

但是一开始$dicnic$写挂了

只好写的匈牙利

/**************************************************************    Problem: 1059    User: zhangheran    Language: C++    Result: Accepted    Time:388 ms    Memory:1464 kb****************************************************************/ // luogu-judger-enable-o2/*    by Qingnian Su    2018.7.26    9:28*/#include
#include
#include
#include
using namespace std;int t;int n;int map[210][210];int dfn[210];int alist[210];bool ins[210];bool opt;bool dfs(int x){// printf("%d\n",x); for(int i=1;i<=alist[x];i++) if(!ins[map[x][i]]){// printf("%d %d %d\n",x,i,map[x][i]); ins[map[x][i]]=true;// printf("%d %d\n",dfn[ins[map[x][i]]],dfs(dfn[map[x][i]])); if(!dfn[map[x][i]]||dfs(dfn[map[x][i]])){ dfn[map[x][i]]=x;return true;} }// printf("qwq %d\n",x); return false;}void clear(){ memset(map,0,sizeof(map)); memset(dfn,0,sizeof(dfn)); memset(alist,0,sizeof(alist));// memset(ins,0,sizeof(ins)); return ;}int main(){// freopen("1.in","r",stdin);// freopen("1.out","w",stdout); scanf("%d",&t); while(t--){ clear(); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&opt), opt=opt==1?map[i][++alist[i]]=j:false; for(int i=1;i<=n;i++){ memset(ins,0,sizeof(ins)); if(!dfs(i)){puts("No");goto rp;} } puts("Yes");rp:; }}/*121 1 1 1 */

 

转载于:https://www.cnblogs.com/cn-suqingnian/p/9374899.html

你可能感兴趣的文章
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
关于空想X
查看>>