时间限制:0.25s

空间限制:4M

题意:

给定一个N*N的棋盘,一些格子被移除,在棋盘上放置一些1*2的骨牌,判定能否放满,并且输出任意方案。


Solution:

首先考虑对棋盘的一个格子黑白染色(实际上不需要),得到一个类似国际象棋棋盘的东西,一个骨牌能放置在相邻的一对黑白格子上

我们考虑对每一个黑格子,连一条到相邻白色格子的边,然后做二分图的最大匹配,判断是否是完备匹配,输出解即可。

    思路比较简单直接,输出需要一些简单技巧和小处理。

code

#include <iostream>
#include <cstring>
#include <fstream>
#include <cmath>
#include <cstdio>
using namespace std;
const int INF = ;
struct node {
int u, v, next;
} edge[];
int pHead[INF], vis[INF], pr[INF];
int dx[] = {, , , -}, dy[] = {, -, , };
int n, m, x, y, nCnt, an;
int exPath (int x) {
for (int k = pHead[x]; k != ; k = edge[k].next) {
int x = edge[k].u, y = edge[k].v;
if (!vis[y]) {
vis[y] = ;
if ( !pr[y] || exPath (pr[y]) ) return pr[y] = x;
}
}
return ;
}
void addEdge (int u, int v) {
edge[++nCnt].u = u, edge[nCnt].v = v;
edge[nCnt].next = pHead[u];
pHead[u] = nCnt;
}
int g[][];
int main() {
//ofstream cout("out.txt");
cin >> n >> m;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++) g[i][j] = ;
for (int i = ; i <= m; i++) {
cin >> x >> y;
g[x][y] = ;
}
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++) {
if (g[i][j])
for (int k = ; k < ; k++) {
int x = i + dx[k], y = j + dy[k];
if (g[x][y])
addEdge ( (i - ) *n + j, (x - ) *n + y);
}
}
for (int i = ; i <= n * n; i++) {
if (exPath (i) ) an++;
memset (vis, , sizeof vis);
}
int t1 = , t2 = ;
int ans[][INF];
for (int i = ; i <= n * n; i++) {
if (pr[i] && !vis[i]) {
vis[i] = vis[pr[i]] = ;
if (abs (pr[i] - i) == n)
ans[][++t1] = min (i, pr[i]);
else
ans[][++t2] = min (i, pr[i]);
}
}
if (an == (n * n - m) ) {
cout << "Yes" << endl;
cout << t1 << endl;
for (int i = ; i <= t1; i++) {
int l, r;
if (ans[][i] % n) l = ans[][i] / n + , r = ans[][i] % n;
else
l = ans[][i] / n, r = n;
cout << l << ' ' << r << endl;
}
cout << t2 << endl;
for (int i = ; i <= t2; i++) {
int l, r;
l = ans[][i] / n + , r = ans[][i] % n;
cout << l << ' ' << r << endl;
}
}
else
cout << "No";
return ;
}

SGU 190.Dominoes(二分图匹配)的更多相关文章

  1. Codeforces 739D - Recover a functional graph(二分图匹配)

    Codeforces 题面传送门 & 洛谷题面传送门 首先假设我们已经填好了所有问号处的值怎样判断是否存在一个合法的构造方案,显然对于一种方案能够构造出合法的基环内向森林当且仅当: \(\fo ...

  2. UVA 12549 - 二分图匹配

    题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...

  3. POJ 1274 裸二分图匹配

    题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...

  4. BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2375  Solved: 1005[Submit][Sta ...

  5. HDU1281-棋盘游戏-二分图匹配

    先跑一个二分图匹配,然后一一删去匹配上的边,看能不能达到最大匹配数,不能这条边就是重要边 /*----------------------------------------------------- ...

  6. HDU 1083 网络流之二分图匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...

  7. hdu 5727 Necklace dfs+二分图匹配

    Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...

  8. BZOJ 1059 & 二分图匹配

    题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...

  9. 【POJ 3020】Antenna Placement(二分图匹配)

    相当于用1*2的板覆盖给定的h*w的格子里的点,求最少的板.可以把格子相邻的分成两个集合,如下图,0为一个集合,1的为一个,也就是(行数+列数)为奇数的是一个集合,为偶数的为另一个集合.1010101 ...

随机推荐

  1. 【转】Android:Bluetooth 的打开和关闭--不错

    原文网址:http://www.ifeegoo.com/android-turn-on-and-turn-off-bluetooth.html 摘要:Android 中打开和关闭 Bluetooth ...

  2. Kafka Topic Partition Replica Assignment实现原理及资源隔离方案

    本文共分为三个部分:   Kafka Topic创建方式 Kafka Topic Partitions Assignment实现原理 Kafka资源隔离方案   1. Kafka Topic创建方式 ...

  3. 移植lrzsz串口文件传输工具到mini2440

    1.下载源码2.解压源码 tar -xzf lrzsz-0.12.20.tar.gz 3.检查配置 ./configure 4.修改Makefile 有三个Makefile需要修改,分别是lrzsz- ...

  4. org.springframework.web.context.ContextLoaderListener 转

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...

  5. 打开本地html的一些设置

    解决:打开本地html,提示:此网站窗口向您索取信息,如果信任此网站,请单击此处允许脚本窗口 工具-internet选项-安全-自定义级别-脚本-允许网站试用脚本窗口提示获取信息 选择启用 工具-In ...

  6. Unity Twist Effect Black Hole

    Shader "Hidden/Twist Effect" {Properties { _MainTex ("Base (RGB)", 2D) = "w ...

  7. openStack 性能开测-2

  8. Android开发工具GenyMotion安装和使用方法

          好长时间没有再接触Android了,以至于GenyMotion出现这么久了,我还没有试用过,记得当时发布Android Studio时,当天我就开始试用了,好吧,看到GenyMotion这 ...

  9. ckeditor_4.5.10_full上传图片功能

    1.找到image.js

  10. 看个人思路吧,清晰的话就简单 CodeForces 271A - Beautiful Year

    It seems like the year of 2013 came only yesterday. Do you know a curious fact? The year of 2013 is ...