首页 > 其他分享 >牛客图论 (第一章)

牛客图论 (第一章)

时间:2023-06-30 11:14:56浏览次数:36  
标签:图论 int head tot 第一章 牛客 y2 ID match

F 棋盘覆盖

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 105 , M = N * N * 4 , ID = N * N + N;

int n,m;
int head[ID],ver[M],nxt[M],tot;
bool ban[N][N];
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int match[ID];
bool v[ID];

void add(int x,int y) {
	ver[++tot] = y , nxt[tot] = head[x] , head[x] = tot;
}
int get(int x,int y) {
	return x * N + y;
}
bool dfs(int x) {
	
	for(int i = head[x] ; i ; i = nxt[i]) {
		int y = ver[i];
		if(v[y]) continue;
		v[y] = true;
		if (!match[y] || dfs(match[y])) {
			match[y] = x;
			return true;	
		}
	}
	
	return false;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);
	
	cin >> n >> m;
	
	while (m--) {
		int x,y;
		cin >> x >> y;
		ban[x][y] = true;
	}
	
	for(int x1 = 1 ; x1 <= n ; ++x1)
		for(int y1 = 1 ; y1 <= n; ++y1) {
			if(ban[x1][y1] || ( (x1 + y1) & 1) ) continue;
			for(int k = 0 ; k < 4 ; ++k) {
				int x2 = x1 + dx[k] , y2 = y1 + dy[k];
				if(x2 < 1 || x2 > n || y2 < 1 || y2 > n || ban[x2][y2]) continue;
				add(get(x1 , y1) , get(x2 , y2));
			}
		}
	
	int ans = 0;
	for(int x = 1 ; x <= n ; ++x)
		for(int y = 1 ; y <= n ; ++y){
			if(ban[x][y] || ( (x + y) & 1) ) continue;
			memset(v , 0 , sizeof v);
			if(dfs(get(x , y))) ++ans;
		}
		
	cout << ans << '\n';
	
	return 0;
}

标签:图论,int,head,tot,第一章,牛客,y2,ID,match
From: https://www.cnblogs.com/xqy2003/p/17516073.html

相关文章

  • 第一章 类型与对象
        在编程语言中通常会有类型的概念,我们所使用的C++也不例外,其为静态类型(与之对应的是动态类型,对象的类型在运行时确定,其类型也可以动态改变)系统,所有对象、变量(包括常量)都得在编译时确定类型,并确定后该对象、变量的类型将不能改变。静态类型在编译时已确定,其是固定......
  • 牛客练习赛112 B qsgg and Subarray
    这里介绍两种解法,贪心和二分核心:只要某一个区间和为0,则所有包含该区间的和都为0贪心根据题意是求出所有⊕和为0的子区间的个数,我们按a[i]来分类,每次求出以a[i]为末尾,区间和为0的区间个数,对于a[i]来说,要想u~i的区间和为0,则需要包含所有a[i]中位为1都有0与之对应,如果u~i的区间和......
  • Coloring Tree (牛客多校) (BFS序列妙用+ f(n)-f(n+1)+ 组合数学)
    题目大意:给一个树,然后有k种颜色可以给树上色权值是2个相同颜色节点的最短距离问让权值为D的方案数 题解:首先要让2个节点为D,怎么处理呢?利用f(D)-f(D+1)即可因为问的是2个相同颜色点的最短距离,因此直接bfs用一个bfs序列然后在bfs一下,因为之前co......
  • Distance to Work (牛客多校) (圆和简单多边形相交面积 + 二分半径)
    #include<bits/stdc++.h>usingnamespacestd;constdoubleeps=1e-9;//浮点数精度控制#defineVectorpoint#definePointpointconstdoublePI=acos(-1);structPoint{doublex,y;Point(doublex=0,doubley=0):x(x),y(y){}friendVe......
  • Shuffle Cards (牛客多校) (rope 块状链表 用作可持续优化平衡树, 用于区间的整体移动
    rope:#include<ext/rope>usingnamespace__gnu_cxx; 定义方法:rope<变量类型>变量名称;人话解释:超级string算法解释:块状链表(即讲链表与数组的优势结合,形成分块思想)用途解释:这本来是一个用于快速操作string的工具,却一般被定义成int,然后用作可持久化线段树!insert(intpos,s......
  • PACM Team (牛客多校) (DP 01背包, 维度较多)
    题目大意:给出n个物品,物品有4个空间值,然后有一个权值问在不超过最大的空间值时,最大的权值  思路:一开始想了很多其他思路没有想出来开始广搜算法,发现dp可以解决(注意看数据范围,是满足的)遇到奇怪的题,就试试dp,特别在数据范围很小的时候 ......
  • C++ Primer 第一章 开始
    输入输出C++并未定义任何输入输出,取而代之包含了一个标准库提供输入输出。iostream库包含两个基础类型:istream和ostream,分别表示输入流和输出流,流代表字符序列。标准库定义了4个IO对象cin为istream类型对象,也称为标准输入cout为ostream类型对象,也称为标准输出标准库还定义了......
  • 第一章 面向对象的基础
    Demo1.php<?php //怎样去创建一个类格式:修饰符class类名{} //我们去创建一个电脑的类,这类可以创建出对象(生产出电脑) classComputer{//类名第一个字母大写 } //创建一台电脑出来,也就是对象的声明 //格式:变量=new类名() //newComputer()表示实例化的过程(意思......
  • 【图论】【建模】IOI2016 railroad
    【图论】【建模】IOI2016railroad题目描述Anna在一个游乐园工作。她负责建造一个新的过山车铁路。她已经设计了影响过山车速度的\(n\)个特殊的路段(方便起见标记为\(0\)到\(n-1\))。现在Anna必须要把这些特殊的路段放在一起并提出一个过山车的最后设计。为了简化问题,你可......
  • 牛客网刷题三
    牛客网刷题21-24这块主要是时序逻辑第21题根据状态转移表实现时序电路_牛客题霸_牛客网(nowcoder.com)`timescale1ns/1nsmoduleseq_circuit(inputA,inputclk,inputrst_n,outputw......