https://www.acwing.com/problem/content/1354/

  • 枚举匹配方法
  • 判环
#include<bits/stdc++.h>
using namespace std;
const int N=15;
int n;
int to1[N],to2[N];//to1是向右移动的单向边,to2是虫洞的双向边
bool st[N],used[N][2],cur[N][2];
//used[i][0] 表示双向边的虫洞
//used[i][1] 表示水平的移动
struct node{int x,y;}S[N];
bool cmp(node a,node b)
{if(a.y==b.y) return a.x<b.x;return a.y>b.y;
}
int ans;
bool dfs_c(int a,int b)
{if(cur[a][b]) return true;if(used[a][b]) return false;cur[a][b]=used[a][b]=true;bool res=false;if(!b)//a的入点,要传送,也就是要走to2{if(dfs_c(to2[a],1))  res=true;//走其传送到的出点(即水平走),因为是俩俩配对的,它已经配过对了,故只可以水平走}else//a的出点,要水平的走{if(to1[a]!=-1&&dfs_c(to1[a],0)) res=true;//水平的走,且有点} cur[a][b]=false;return res;
}
bool check()
{memset(used,0,sizeof used);memset(cur,0,sizeof cur);for(int i=0;i<n;i++)for(int j=0;j<2;j++) if(dfs_c(i,j)) return true;return false;
}
void dfs(int u)
{if(u==n/2){if(check())  ans++;return;}for(int i=0;i<n;i++){if(!st[i]){for(int j=i+1;j<n;j++){if(!st[j]){st[i]=st[j]=true;to2[i]=j,to2[j]=i;dfs(u+1);to2[i]=to2[j]=-1;st[i]=st[j]=false;}}break;//选完了可以退了,不然会多选}}
}
int main(void)
{cin>>n;for(int i=0;i<n;i++) cin>>S[i].x>>S[i].y;sort(S,S+n,cmp);//排序,将同一水平线的点弄到一块memset(to1,-1,sizeof to1);memset(to2,-1,sizeof to2);for(int i=1;i<n;i++)if(S[i].y==S[i-1].y) to1[i-1]=i;//说明这俩是同一水平线的点dfs(0);cout<<ans<<endl;return 0;
}

1352. 虫洞【难度: 中 / 枚举 判环】相关推荐

  1. P1444 [USACO1.3]虫洞 wormhole,新手向超详细讲解(搜索、判环、拆点、好题)

    题目传送门 题目不难,但是有很多细节和技巧. 分析题意 首先我们根据题意发现奶牛一共只会出现两种动作(两种情况),一是向右走,二是传送. 我们并不知道奶牛的位置,而题目所求的是有多少种分配虫洞传送的分 ...

  2. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  3. Algorithm Set:floyd判环法

    目录 1.1 适用情况 1.2 复杂度 1.3 判断是否存在环 1.4 找到环的入口 1.5 代码实现 1.1 适用情况 该算法用于解决一个数组/链表中是否存在环的情况! 1.2 复杂度 时间复杂度: ...

  4. Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)

    题意(经过转换):给你一个n个点m条边的有向图,再给你一个起点x,问存不存在一条路径满足①路径中有奇数条边:②终点的出度为0,如果存在输出Win,并在第二行输出这个路径(可能不唯一输出任意一种),否则 ...

  5. topo排序判环实操

    项目场景: 有一张订单表,和订单关系表,订单关系表中维护订单与订单之间的父子关系(多对多). 现在需要根据目标订单id去查询到目标订单关系的完整链路与链路中订单信息集合,并且判断链路是否有成环现象. ...

  6. POJ 3621 Sightseeing Cows(最优比率环+spfa的dfs判环优化)

    题目链接 题目大意:给你一个有向图,每个点都有一个权值,每条边都有一个长度,需要找到一个各点权值和/各边长度和 最大的环出来,输出这个比值. 分析:假设结点权值为wiw_iwi​,边的长度为lil_i ...

  7. [Noi2008]假面舞会(dfs判环)

    [Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...

  8. 数据结构初阶(4)(OJ练习【判断链表中是否有环、返回链表入口点、删除链表中的所有重复出现的元素】、双向链表LinkedList【注意事项、构造方法、常用方法、模拟实现、遍历方法、顺序表和链表的区别)

    接上次博客:数据结构初阶(3)(链表:链表的基本概念.链表的类型.单向不带头非循环链表的实现.链表的相关OJ练习.链表的优缺点 )_di-Dora的博客-CSDN博客 目录 OJ练习 双向链表--Li ...

  9. bzoj2938,tyvj4338,病毒(trie+拓扑判环)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 345  Solved: 176 [Submit][Status][ ...

最新文章

  1. 线段树(点查询、区间查询、区间修改)模板
  2. 使用cnpm代替npm优化下载速度
  3. Centos6.5静态IP设置
  4. js原生带缩略图的图片切换效果
  5. python selenium与自动化
  6. java 判断日期为第几天
  7. 使用FTP获取RFC文档
  8. NET 4.0 System.Threading.Tasks学习笔记
  9. opensource项目_最佳Opensource.com:业务
  10. Spring IoC — 基于Java类的配置
  11. python怎么安装re模块_python模块模块re
  12. 宏碁电脑BIOS没有usb启动项怎么办?
  13. 文本到图像模型,如何快速生成高质量图片? #Google Muse AI
  14. mysql如何使用多核cpu_利用多核 CPU 实现并行计算
  15. 关于怎么学习好一门技术一门语言
  16. java通过QR生成二维码 (QRCodeUtils工具类)(HUTOOL生成二维码)
  17. Python爬取全球是最大的电影数据库网站IMDb数据
  18. mybatis 启动报错 分析
  19. 遍历对象Object的两类方法
  20. 期货开户手续费怎么计算?

热门文章

  1. Ubuntu20.04中安装shutter
  2. HiveSQL中复杂数据类型操作
  3. [jQuery]点击某元素之外触发事件
  4. .net core使用数据库
  5. DDCTF-2018-writeup(5misc)
  6. 查看dll 的是32位还是64位
  7. 关于微信支付冲突的问题
  8. 一个简单的blog系统(十一) 增加文章检索功能
  9. jdbc连接sqlserver报错java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver...
  10. 内网能PING通TELNET通不能访问解决