以一个这个环为基准,剩下的边可以放在圈外,也可以放在圈内,两种状态。

如果两条线段出现了环上意义的交叉即冲突,即不能同时放在圈外/内。

这是典型的 2-SAT 问题,因为关系传递是无向的,即逆命题与原命题都存在,用并查集维护即可。

关于判断两条线段是否出现了环上意义的交叉:

枚举两条边 \((x_1. y_1), (x_2, y_2)\),如果\(x_2, y_2\) 中的一个在线段所属环的内部,一个在外部,那么肯定分居两侧。

枚举的复杂度是 \(O(TM^2)\) (严格来说要加并查急的复杂度。。)然而直接AC了,这再次告诉我们了 \(O(1e10)\) 不是梦,所以数据过水。

看到 \(std\) 还有个剪枝,就是一个平面图一定满足一个性质:

\(m <= 3n - 6\),不符合直接输出 \(NO\),所以可以把 \(m\) 控制在 \(300\) 左右,这样就跑的动了。


感性证明一下这个性质:

考虑构造最大边数的平面图,而没有重边(题目限制)

目前有一个环,在圈内然后任意找一个点,向除了自己和相邻的点连 \(n - 3\) 条边。在圈外找之前那个点的相邻点,然后向除了自己和相邻的点连 \(n - 3\) 条边,这时候无论连什么边必然相交,所以最大边数就是 \(3n - 6\)。

#include <cstdio>
#include <iostream>
#include <vector>
#define x first
#define y second
using namespace std;
const int N = 205, M = 10005;
typedef pair<int, int> PII;
int n, m, a[N], pos[N], f[M << 1];
PII e[M];
int get(int a, int b, int c) {
a = pos[a], b = pos[b], c = pos[c];
if (a > b) swap(a, b);
return (a < c && c < b) ? 0 : 1;
}
int find(int x) {
return x == f[x] ? x : f[x] = find(f[x]);
}
bool check() {
for (int i = 1; i <= m; i++) if (find(i) == find(i + m)) return false;
return true;
}
int main() {
int T; scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
for (int i = 1; i <= 2 * m; i++) f[i] = i;
for (int i = 1; i <= m; i++) {
scanf("%d%d", &e[i].x, &e[i].y);
}
for (int i = 1; i <= n; i++) scanf("%d", a + i), pos[a[i]] = i;
if (m > 3 * n - 6) { puts("NO"); continue; }
for (int i = 1; i <= m; i++) {
for (int j = i + 1; j <= m; j++) {
if (e[i].x == e[j].x || e[i].x == e[j].y || e[i].y == e[j].x || e[i].y == e[j].y) continue;
if (get(e[i].x, e[i].y, e[j].x) != get(e[i].x, e[i].y, e[j].y)) {
f[find(i)] = find(j + m), f[find(i + m)] = find(j);
}
}
}
puts(check() ? "YES" : "NO");
}
}

Acwing 403. 平面的更多相关文章

  1. $Poj3714/AcWing\ Raid$ 分治/平面最近点对

    $AcWing$ $Sol$ 平面最近点对板子题,注意要求的是两种不同的点之间的距离. $Code$ #include<bits/stdc++.h> #define il inline # ...

  2. apache httpd服务器403 forbidden的问题

    一.问题描述 在apache2的httpd配置中,很多情况都会出现403. 刚安装好httpd服务,当然是不会有403的问题了.主要是修改了一些配置后出现,问题描述如下: 修改了DocumentRoo ...

  3. [Unity3D]巧妙利用父级子级实现Camera场景平面漫游

    本文系作者原创,转载请注明出处 入门级的笔者想了一上午才搞懂那个欧拉角的Camera旋转..=.= 在调试场景的时候,每次都本能的按下W想前进,但是这是不可能的(呵呵) 于是便心血来潮想顺便添加个Ke ...

  4. 【NEUQACM OJ】1017: 平面切割(特别版)

    1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多 ...

  5. 遇到 HTTP 错误 403.14 - Forbidden?

    打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...

  6. nginx 访问目录403

    centos7.2默认安装好nginx后,会在/usr/share/nginx/html下作为主目录 但是如果想访问下面的目录会发现没有权限,返回403错误 这时候要注意在/etc/nginx/ngi ...

  7. Apache2.4部署django出现403 Forbidden错误解决办法

    前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...

  8. 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#

    个人亲自编写.测试,可以正常使用   道理看原文,这里不多说   网上找到的几篇基本都不能用的   C#代码 bool Equal(float f1, float f2) { return (Math ...

  9. nginx配置文件或目录404和403

    对于Nginx web目录下的文件,如果不想用户访问那么可以配置返回404或者403状态,默认情况下对于目录来说,如果目录下没有默认文档,那么默认返回是403,也就是不允许查看目录列表,但是如果知道静 ...

随机推荐

  1. SpringMVC源码之Handler注册、获取以及请求controller中方法

    总结 对requestMappingHandlerMapping进行initializeBean时register Handler http开始请求时,initHandlerMappings,Disp ...

  2. 关闭防火墙和设置主机名和ip及克隆机网卡处理方法

    关闭防火墙: service NetworkManager stop --图形化用ifconfig之前先关掉网络服务. chkconfig NetworkManager off (将开机自启动关掉,使 ...

  3. JVM简单入门

    目录 初识JVM 双亲委派机制 沙箱安全机制 Native PC计数器 方法区 栈 堆 工具分析OOM GC算法 GC算法总结 JMM 初识JVM JVM的位置:jre中包含jvm. 双亲委派机制 双 ...

  4. DNS域传输漏洞复现

    漏洞原理 DNS分类 常见的DNS记录类型 A IP地址记录,记录一个域名对应的IP地址 AAAA IPv6 地址记录,记录一个域名对应的IPv6地址 CNAME 别名记录,记录一个主机的别名 MX ...

  5. 堆的数据结构java

    public class MaxHeap { private int[] data; private int count; private int capacity; public MaxHeap(i ...

  6. 适合 Java 新手的开源项目集合——在 GitHub 学编程

    作者:HelloGitHub--老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是 ...

  7. Linux安装MySQL5.7(CentOS)

    1.下载解压 1.1 MySql 5.7.26下载地址: https://dev.mysql.com/downloads/mysql/5.7.html#downloads 1.2 解压 tar -xv ...

  8. Vue—新版本router-view 与 keep-alive 的互动

    1. <keep-alive> 直接嵌套到 <router-view> 上会失效,正确写法: <router-view #="{ Component }&quo ...

  9. 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..

    大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...

  10. Ajax原理与图解

    Ajax原理 Ajax 的全称是Asynchronous JavaScript and XML. Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后 ...