Matrix Gym
来源:互联网 发布:罗马斗兽场 知乎 编辑:程序博客网 时间:2024/06/03 05:54
用对角线匹配可选值
#include <iostream>#include <string>#include <cstring>#include <vector>#include <set>#include <stack>#include <algorithm>#include <iterator>#include <queue>#include <cmath>#include <map>#include <cstdio>using namespace std;#define maxn (300 + 7)#define INF 0x3f3f3f3fint n;int mp[maxn][maxn];vector<int> a[3*maxn];map<int, int> f;set<int> st;int ans[maxn*3];int solve(int id) { //cout << " 56565 " << endl; for(int i = 0; i < a[id].size(); ++i) { int t = a[id][i]; if(st.count(t) == 0) { st.insert(t); if(f[t] == 0 || solve(f[t])) { f[t] = id; ans[id] = t; return 1; } } } return 0;}int main() { scanf("%d", &n); for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) scanf("%d", &mp[i][j]); } int id = 1; for(int i = n-1; i >= 0;--i) { int t = i; for(int j = 0; t < n;) { a[id].push_back(mp[t][j]); t++; j++; } id++; } for(int j = 1; j < n; ++j) { int t = j; for(int i = 0; t < n ; ) { a[id].push_back(mp[i][t]); i++; t++; } id++; } int m = id-1; int cnt = 0; f.clear(); for(int i = 1; i <= m; ++i) { st.clear(); if(solve(i)) cnt++; } //cout << " +++ " << endl; if(cnt == 2*n - 1) {//cout << " 2333 duile" << endl; cout << "YES"; for(int i = 1; i <= m; ++i) { cout << " " << ans[i]; } } else puts("NO"); return 0;}
阅读全文
1 0
- Matrix Gym
- Gym 101484 I Matrix Sum
- codeforces Gym 101341 I Matrix God
- Gym 101503I Just Matrix【思维+拓扑排序】好题~
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- Gym
- tensorflow 学习笔记14 scope命名方式
- php实现邮件群发
- java中string, byte和int转换
- Spring Cloud组件完整demo
- 标准C++中String方法总结
- Matrix Gym
- 剑指offer-连续子数组的最大和
- Oracle之数据库安装
- Java进阶之路【代码篇】——《CleanCode》编程规则精编(8) 类
- Java动态代理
- 数据库基本
- CentOS下安装mysql及配置使用
- python 符合Python风格的对象
- 二分法——【Search Insert Position】【Search for a Range】【数字在排序数组中出现的次数】