网络流24题 洛谷 3355 骑士共存

转换成最小割;

#include <bits/stdc++.h>using  namespace  std ;const  int  mx [ 9 ] = { 2 , 2 , -2 , -2 , -1 , 1 , -1 , 1 } ;
const  int  my [ 9 ] = { -1 , 1 , -1 , 1 , 2 , 2 , -2 , -2 } ; const  int  N = 100000 + 10 , inf = 1e8 + 7 ;queue < int >  q ;int  hh [ N << 2 ] , head [ N << 2 ] , nxt [ N << 2 ] , to [ N << 2 ] , cn = 1 ;
int  flt [ N << 2 ] , dis [ N ] ;
int  src , sink , x , y , n , m ;
bool  vis [ N ] , tag [ 500 ] [ 500 ] ;int  minx ( int  a , int  b ) {return  a > b ? b : a ;
}void  create ( int  u , int  v , int  f ) {cn ++ ;to [ cn ] = v ;flt [ cn ] = f ; nxt [ cn ] = head [ u ] ;head [ u ] = cn ;cn ++ ;to [ cn ] = u ;flt [ cn ] = 0 ; nxt [ cn ] = head [ v ] ;head [ v ] = cn ;
}bool  bfs ( ) {memset ( vis , 0 , sizeof ( vis ) ) ;memset ( dis , 0 , sizeof ( dis ) ) ;q . push ( src ) ;vis [ src ] = 1 ;while ( ! q . empty ( ) ) {int  tmp = q . front ( ) ;q . pop ( ) ;for ( int  i = head [ tmp ] ; i ; i = nxt [ i ] ) {int  v = to [ i ] ;if ( flt [ i ]  &&  ! vis [ v ] ) {dis [ v ] = dis [ tmp ] + 1 ;q . push ( v ) ;vis [ v ] = true ;}}} return  vis [ sink ] ;
}
int  dinic ( int  u , int  delta ) {if ( u == sink )  return  delta ;int  res = 0 , v ;for ( int  i = hh [ u ] ; i  &&  delta ; i = nxt [ i ] ) {v = to [ i ] ;if ( flt [ i ]  &&  dis [ v ] == dis [ u ] + 1 ) {int  dd = dinic ( v , minx ( delta , flt [ i ] ) ) ;flt [ i ] -= dd ;flt [ i ^ 1 ] += dd ;res += dd ;delta -= dd ;hh [ u ] = i ;}}return  res ;
}int  main ( ) {scanf ( "%d%d" , & n , & m ) ;src = 0 ; sink = n * n + 1 ; for ( int  i = 1 ; i <= m ; i ++ ) {scanf ( "%d%d" , & x , & y ) ;tag [ x ] [ y ] = 1 ;}for ( int  i = 1 ; i <= n ; i ++ )for ( int  j = 1 ; j <= n ; j ++ ){if( tag [ i ] [ j ] )  continue ;int  id = ( i - 1 ) * n + j ;if( ( i + j ) & 1 ){create ( src , id , 1 ) ;for( int  k = 0 ; k <= 7 ; k ++ ){int  t1 = i + mx [ k ] , t2 = j + my [ k ] ;if ( t1 <= 0  ||  t1 > n  ||  t2 <= 0  ||  t2 > n  ||  tag [ t1 ] [ t2 ] ) continue ;create ( id , ( t1 - 1 ) * n + t2 , inf ) ;}} else create ( id , sink , 1 );}int  ans = 0 ;while ( bfs ( ) ) {ans += dinic ( src , inf ) ; for ( int  i = 0 ; i <= n * n + 1 ; i ++ ) hh [ i ] = head [ i ] ;}printf ( "%d" , n * n - m - ans ) ;return  0 ;
}
Ans

 

转载于:https://www.cnblogs.com/horsepower2001/p/8970351.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始设计CPU

CPU&#xff0c;中文全称为中央处理单元&#xff0c;简称处理器&#xff0c;是现代电子计算机的核心器件。如果你想了解一台计算机是如何构建并工作的&#xff0c;那么深入了解CPU的设计非常有用。不过&#xff0c;这个美好的愿望是否会遭遇“骨感”的现实呢&#xff1f;毕竟一…

IT人员必看的几个网站 http://gzsean.blog.51cto.com

IT技术开发综合类  适合人群&#xff1a;只适合软件开发者技术开发最全面的论坛&#xff0c;里面可以遇到很多牛人&#xff0c;版面也很全&#xff0c;什么J2EE&#xff0c;.NET啊&#xff0c;该有的全上&#xff0c;在这里基本上可以提出任何问题&#xff0c;人气也是最旺的…

上传突破学习笔记

上传地方&#xff0c;上传路径&#xff0c;上传验证&#xff0c;上传突破解析漏洞&#xff1a;后门格式&#xff0c;后门就必须要以脚本格式执行&#xff0c;才能执行代码效果。asp木马格式 必须要以asp执行 不可能用jpg&#xff0c;gif&#xff0c;txt等格式执行&#xff0c;解…

嵌入式OS入门笔记-以RTX为案例:一.简介

嵌入式OS入门笔记-以RTX为案例&#xff1a;一.简介 最近在做OS相关的项目&#xff0c;一方面涉及到大量&#xff08;通用&#xff09;操作系统的概念和理解&#xff0c;另一方面要深入到一个小实时操作系统的源代码中&#xff0c;并在此操作系统上开发应用。虽然说内容上并不难…

Linux进程O(1)调度算法,面试必考哦

进程调度有很多方法&#xff0c;这里只讨论Linux下的进程调度&#xff0c;先说下&#xff0c;这个是高端面试必考题&#xff0c;既然我发文了&#xff0c;大家最好看看&#xff0c;而且目前看到的写得最好的文章&#xff0c;推荐给大家。Linux是一个支持多任务的操作系统&#…

让Visual Studio 也支持JS代码折叠 —— 续 [ Visual Studio | Js | ScriptOutline | SmallOutline ]...

前言 上文让JS代码折叠的功能能用了&#xff0c;本文将对代码继续改进以期更好用、更实用&#xff0c;随后有介绍Visual Studio JS方面的几个插件。 文章 1. VS2003折叠代码的Micro 2. MSDN 3. Document Outline for Client Script in Visual Studio 2005 正文 …

sqlserver数据库访问帮助类

1 /// <summary>2 /// 数据库访问帮助类3 /// </summary>4 public static class DbHelper5 {6 private const string ConnStr "server127.0.0.1;databasedb_test;Uiduser1;PwdPs123321;";7 8 9 /// <summary> 10 /// 执行 增、删、改 11 /// <…

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

嵌入式OS入门笔记-以RTX为案例&#xff1a;二.快速移植到RTX本篇笔记将简单介绍RTX&#xff0c;包括基本架构&#xff0c;如何在Keil中配置。需要安装ARM-MDK和一块硬件板&#xff0c;笔记以STM32F4Discovery为例子。1.为什么要用RTOS&#xff1f;尽管把所有程序放在一个大的循…

再解析下内核自旋锁和优先级翻转问题

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析漫画|Linux 并发、竞态、互斥锁、自旋锁、信号量都是什么鬼&#xff1f;Linux内核自旋锁之前写的自旋锁的文章&#xff0c;现在再加一篇&#xff0c;可能单纯的一两次说明不能把问题说清楚。所以再写一篇文…

有许多话不能说

说的问题是一个大问题。人&#xff0c;长了嘴巴&#xff0c;除了吃饭便是说话。当然还有代替鼻孔呼吸、排除呼吸道污秽等功能&#xff0c;但均不可与说同日而语。涉及说&#xff0c;就有说的内容问题&#xff0c;据观察&#xff0c;有许多话是不能说的。 好话不能说&#xff0c…

ios 逆向编程(环境搭建)

首先如果你想要逆向其他的APP 动态的查看 或者修改人家APP里面的东西 1&#xff0c; 首先要有一台越狱的手机 最好是9.1以下的&#xff0c;因为9.2以上&#xff08;包括9.2&#xff09;就不能完美越狱了 2&#xff0c;手机也要5s以上的&#xff08;因为从5S开始支持arm64架构&…

嵌入式OS入门笔记-以RTX为案例:三.初探进程

嵌入式OS入门笔记-以RTX为案例&#xff1a;三.初探进程1.理论 进程&#xff0c;英文称呼很多Process, Task 等等&#xff0c;一般通用操作系统称Process的比较多&#xff0c;各种称呼涵义稍微有不一样。一般而言&#xff0c;进程是对一个运行单元的抽象&#xff0c;主要包括…

图文方式管理Linux服务器(Webmin)

客户让做webmin&#xff0c;才知道linux下也有界面的管理了 对于大部分使用计算机的人来说&#xff0c;linux的印象就是一大堆的命令字符以及黑黑的显示屏。虽然现在Linux的桌面版有了长足的进步&#xff0c;界面已和Windows不相上下了&#xff0e;但对于Linux服务器来说&am…

最大、最小堆的实现

最大最小堆 堆是一种经过排序的完全二叉树&#xff0c;其中任一非终端节点的数据值均不大于&#xff08;或不小于&#xff09;其左子节点和右子节点的值。 最大堆和最小堆是二叉堆的两种形式。 最大堆&#xff1a;根结点的键值是所有堆结点键值中最大者。 最小堆&#xff1a;根…

嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

嵌入式OS入门笔记-以RTX为案例&#xff1a;四.简单的时间管理 上一节简单记录了进程task。有了进程以后&#xff0c;我们需要关心怎么样分配CPU资源&#xff08;或者运行时间&#xff09;给每个进程。那么就要引入排程&#xff08;scheduling&#xff09;的概念。排程一般都是O…

我等这个含蓄的技术男当上了CEO

大家好&#xff0c;祝大家五一节日快乐&#xff01;今天没有写技术文章&#xff0c;今天想吹一个人&#xff0c;他是我的朋友&#xff0c;他做公众号很久了&#xff0c;技术文章写的也不错&#xff0c;但是阅读和关注量一直没有上来&#xff0c;我之前好几次在公众号上转发了他…

Oracle的列转行问题

Oracle的列转行问题Oracle中使用语句将行数据转换称不同的列表示&#xff0c;或者将不同的列数据写到同一列的不同行上的行列转换问题是一个非常传统的话题。网络上流传了很多将行数据转换称列数据的方法和应用实例&#xff0c;一般通过decode或者case函数与聚合函数联合实现功…

Linux CAN通信

Linux CAN通信 实现了Linux下的CAN通信——初始化&#xff0c;发两个送和接收&#xff08;采用队列形式&#xff09;&#xff0c;使用两个线程&#xff0c;还有一个超时响应目前未写。接收部分使用select实现。 #ifndef _CAN_H_ #define _CAN_H_#include <stdio.h> #incl…

(四)Kinect人脸识别

kinect可以通过摄动摄像头不仅可以获取人脸位置旋转信息&#xff0c;也可以获取脸部轮廓的三维坐标 可以参考插件中的场景KinectFaceTrackingDemo1-4&#xff0c;在kinectManager基础上需要脚本FacetrackingManager。 1&#xff09;通过KinectManager kinectManager KinectMan…

广东总冠军

lets go tiger 看这篇文章之前&#xff0c;先看看我们看球的视频 恭喜广东拿下总冠军&#xff01; 恭喜胡明轩夺得FMVP&#xff01; 我当时预测的是周鹏或者胡明轩拿下FMVP&#xff0c;最后是胡明轩&#xff0c;广东后场三条枪表现都非常亮眼。如果是上一场广东夺冠&#xff0c…