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

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

这是典型的 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. Python_错误调试2018.3.17【待完善】

    异常处理 几个提示信息: notice 注意 warning 警告 error 错误 debug 调试 错误处理 1.Try语句 try execpt 2.print() 3.assert断言,当满足 ...

  2. Metasploit 脚本Web传递(Web Delivery)

    Metasploit 脚本Web传递(Web Delivery)

  3. php 判断网站是http还是https

    //判断是http还是https $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (i ...

  4. beef抓包简析

    搭建完了beef就想简答的抓下包分析下 这是第一个包,追踪它 返回demo页面,并发现其中的脚本 window.location.protocol表示协议http, window.location.h ...

  5. swlib

    Swoole人性化组件库 ~ Swoole Humanization Component Library

  6. 通过Camtasia来制作画中画视频效果的方法

    随着全民娱乐化的发展,视频的形式也更加多种多样了.视频形式的多样化能让观众从不同形式的视频中观赏到更有趣味的内容.比如像画中画的视频形式,让视频中的人物看起来像与观众一同观看视频,或者形成两个视频的对 ...

  7. Guitar Pro吉他指弹入门——日式指弹的pm技巧

    在上一篇指弹的文章中,笔者向大家介绍了一下美式指弹,以及他独树一帜的三指法.那么这一期的文章,我将介绍另一个指弹界的大流派--日式指弹,日式指弹曲子向来以细腻而多变的情绪以及表达出来的艳丽色彩著称,今 ...

  8. FL Studio通道窗口和步进音序器知识讲解

    FL Studio中通道窗口是以样本为概念的音乐制作基础.通道窗口包含了步进音序器并结合了各种丰富的功能,可以通过通道窗口打开各通道的设置窗口.钢琴卷轴等.步进音序器在节奏制作方便表现出很好的优势,它 ...

  9. img元素的联用

    img元素的常用属性: src属性:资源地址 alt属性:当图片资源失效时,将出现该属性的设置的文字 最简单的联动: 和a元素联用(直接用a标签套) <a href="https:// ...

  10. 基于Docker搭建pypi私有仓库

    一.搭建 1.准备htpasswd.txt文件 该文件内容包含上传包至仓库时验证的用户名和密码 pip install htpasswd htpasswd -sc htpasswd.txt <u ...