网络瘤好题 洛谷 P5030 长脖子鹿放置
时间:2019-09-14
本文章向大家介绍网络瘤好题 洛谷 P5030 长脖子鹿放置,主要包括网络瘤好题 洛谷 P5030 长脖子鹿放置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
其实这是一道匈牙利裸题。。。主要难点在于建二分图。
这是题目给的图。。。
这是某位神犇给的图。。。
一目了然二分图怎么建。。。
话不多说,直接上代码。。。
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
template<class T>
inline void read(T& p) {
char c;
p=0;
bool f=0;
for(c=getchar(); c<'0'||c>'9'; c=getchar())if(c=='-')f=true;
for(; c>='0'&&c<='9'; c=getchar()) p=(p<<3)+(p<<1)+c-'0';
if(f)p=-p;
}
template<class T,class... Args>
inline void read(T& x,Args&... args) {
read(x);
read(args...);
}
template<class T>
inline void write(T x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar('0'+x%10);
}
template<class T,class... Args>
inline void write(T x,Args... args) {
write(x);
putchar(' ');
write(args...);
}
template<class... Args>
inline void writeln(Args... args) {
write(args...);
putchar('\n');
}
int n,m,e,ans;
int u,v;
vector<int> dis[40001];
bool vis[40001];
bool zi[201][201];
int match[40001];
int fx[8]= {-3,-3,-1,-1,1,1,3,3};
int fy[8]= {-1,1,-3,3,-3,3,-1,1};
inline int num(int x,int y) {
return (x-1)*n+y;
}
bool find(int x) {
for(register int i=0,to; i<dis[x].size(); i++) {
to=dis[x][i];
if(!vis[to]) {
vis[to]=true;
if(!match[to]||find(match[to])) {
match[to]=x;
return true;
}
}
}
return false;
}
int max_match() {
int ans=0;
for(register int i=1; i<=n; i+=2) {
for(register int j=1; j<=m; j++) {
if(!zi[i][j]) {
memset(vis,0,sizeof(vis));
if(find(num(i,j)))ans++;
}
}
}
return ans;
}
int main() {
read(n,m,e);
for(register int i=1,x,y; i<=e; i++) {
read(x,y);
zi[x][y]=1;
}
for(register int i=1; i<=n; i+=2) {
for(register int j=1; j<=m; j++) {
if(zi[i][j])continue;
for(register int k=0; k<8; k++) {
int _x=i+fx[k],_y=j+fy[k];
if(_x<1||_y<1||_x>n||_y>m||zi[_x][_y])continue;
dis[num(i,j)].push_back(num(_x,_y));
}
}
}
write(n*m-e-max_match());
return 0;
}
蜜汁80分,emm被卡常了。。。
不用STL,用链式前向星。。。
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
template<class T>
inline void read(T& p) {
char c;
p=0;
bool f=0;
for(c=getchar(); c<'0'||c>'9'; c=getchar())if(c=='-')f=true;
for(; c>='0'&&c<='9'; c=getchar()) p=(p<<3)+(p<<1)+c-'0';
if(f)p=-p;
}
template<class T,class... Args>
inline void read(T& x,Args&... args) {
read(x);
read(args...);
}
template<class T>
inline void write(T x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar('0'+x%10);
}
template<class T,class... Args>
inline void write(T x,Args... args) {
write(x);
putchar(' ');
write(args...);
}
template<class... Args>
inline void writeln(Args... args) {
write(args...);
putchar('\n');
}
struct edge {
int u,v,next;
} a[2000001];
int n,m,e,ans;
int u,v;
int tot,fr[40001];
bool vis[40001];
bool zi[201][201];
int match[40001];
int fx[8]= {-3,-3,-1,-1,1,1,3,3};
int fy[8]= {-1,1,-3,3,-3,3,-1,1};
inline int num(int x,int y) {
return (x-1)*n+y;
}
inline void add(int from,int to) {
a[++tot].u=from;
a[tot].v=to;
a[tot].next=fr[from];
fr[from]=tot;
}
bool find(int x) {
for(register int now=fr[x],to;now;now=a[now].next) {
to=a[now].v;
if(!vis[to]) {
vis[to]=true;
if(!match[to]||find(match[to])) {
match[to]=x;
return true;
}
}
}
return false;
}
int max_match() {
int ans=0;
for(register int i=1; i<=n; i+=2) {
for(register int j=1; j<=m; j++) {
if(!zi[i][j]) {
memset(vis,0,sizeof(vis));
if(find(num(i,j)))ans++;
}
}
}
return ans;
}
int main() {
read(n,m,e);
for(register int i=1,x,y; i<=e; i++) {
read(x,y);
zi[x][y]=1;
}
for(register int i=1; i<=n; i+=2) {
for(register int j=1; j<=m; j++) {
if(zi[i][j])continue;
for(register int k=0; k<8; k++) {
int _x=i+fx[k],_y=j+fy[k];
if(_x<1||_y<1||_x>n||_y>m||zi[_x][_y])continue;
add(num(i,j),num(_x,_y));
}
}
}
write(n*m-e-max_match());
return 0;
}
好了AC了
原文地址:https://www.cnblogs.com/STOGMH/p/11519849.html
- 不怕学不会 使用TensorFlow从零开始构建卷积神经网络
- 微信公众平台增加批量获取用户基本信息接口
- 谈网络适配器
- 【框架】为降低机器学习开发者门槛,苹果发布了Turi Create框架
- 新闻数据库分表案例
- 建立智能的解决方案:将TensorFlow用于声音分类
- Plugin Hook 设计与实现
- 数据与应用程序间通信·UDP Socket
- Java 数据类型转换
- Spring boot with Scheduling
- Spring Properties 文件读取
- 【学术】你真的知道什么是随机森林吗?本文是关于随机森林的直观解读
- Spring boot 将 Session 放入 Redis
- 【教程】估算一个最佳学习速率,以更好地训练深度神经网络
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 时序数据库 InfluxDB(六)
- [058]SQLite on Android
- 【Rust日报】2020-07-15 用Rust重写FORTRAN科学软件
- 一文读懂 DEX 文件格式解析
- Guava集合--新集合类型
- 从 Node.js 到 Go
- 性能不达标,计将安出?
- Yaml 速成查询表
- 设计模式实战-策略模式,想让你的代码变幻莫测吗?
- 设计模式实战-模板模式,代码复用神器
- CSS Flexbox 布局完全指南 (二):3000字,多示例讲解
- 设计模式实战-访问者模式,减少代码体积
- Spring Security 实战干货:UsernamePasswordAuthenticationFilter 源码分析
- 打卡群刷题总结0715——旋转链表
- 设计模式实战-中介模式,为你牵桥搭线