Acwing 403. 平面
以一个这个环为基准,剩下的边可以放在圈外,也可以放在圈内,两种状态。
如果两条线段出现了环上意义的交叉即冲突,即不能同时放在圈外/内。
这是典型的 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. 平面的更多相关文章
- $Poj3714/AcWing\ Raid$ 分治/平面最近点对
$AcWing$ $Sol$ 平面最近点对板子题,注意要求的是两种不同的点之间的距离. $Code$ #include<bits/stdc++.h> #define il inline # ...
- apache httpd服务器403 forbidden的问题
一.问题描述 在apache2的httpd配置中,很多情况都会出现403. 刚安装好httpd服务,当然是不会有403的问题了.主要是修改了一些配置后出现,问题描述如下: 修改了DocumentRoo ...
- [Unity3D]巧妙利用父级子级实现Camera场景平面漫游
本文系作者原创,转载请注明出处 入门级的笔者想了一上午才搞懂那个欧拉角的Camera旋转..=.= 在调试场景的时候,每次都本能的按下W想前进,但是这是不可能的(呵呵) 于是便心血来潮想顺便添加个Ke ...
- 【NEUQACM OJ】1017: 平面切割(特别版)
1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多 ...
- 遇到 HTTP 错误 403.14 - Forbidden?
打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...
- nginx 访问目录403
centos7.2默认安装好nginx后,会在/usr/share/nginx/html下作为主目录 但是如果想访问下面的目录会发现没有权限,返回403错误 这时候要注意在/etc/nginx/ngi ...
- Apache2.4部署django出现403 Forbidden错误解决办法
前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...
- 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#
个人亲自编写.测试,可以正常使用 道理看原文,这里不多说 网上找到的几篇基本都不能用的 C#代码 bool Equal(float f1, float f2) { return (Math ...
- nginx配置文件或目录404和403
对于Nginx web目录下的文件,如果不想用户访问那么可以配置返回404或者403状态,默认情况下对于目录来说,如果目录下没有默认文档,那么默认返回是403,也就是不允许查看目录列表,但是如果知道静 ...
随机推荐
- Centos7下Jewel版本radosgw服务启动
前言 本篇介绍了centos7下jewel版本的radosgw配置,这里的配置是指将服务能够正常起来,不涉及到S3的配置,以及其他的更多的配置,radosgw后面的gw就是gateway的意思,也就是 ...
- C# 简易的串口监视上位机实现
实现上位机和下位机之间的通信,通常使用的是串口通信,接下来实现一个通过上位机和串口调试助手来完成串口通信测试. 首先创建一个WInfrom窗体应用工程文件,创建过程可参考https://www.cnb ...
- git操作之三:git reset
在上篇文章中介绍了git restore命令,该命令的可以看作是撤销命令,文件在不同的状态下,使用git restore <file> 命令,会撤销对文件的修改,是文件回到修改前的状态也就 ...
- Docker学习—Swarm
前言: 前一篇<Docker学习-Machine>中对Machine 进行了学习,本篇继续学习Swarm,那么Swarm是什么呢,有什么用呢?接下来一步步了解. 一.什么是Docker-S ...
- 画echart图时,安卓手机正常,苹果手机上tooltip 在坐标轴下一层
问题: 解决: 在tooltip 中添加如下代码: tooltip:{ position:function(point, params , dom, rect, size){ dom.style.tr ...
- 通过phpmyadmin拿下webshell
废话: 1.听说网上卖手机的网站很多是诈骗的,搜到一个499元货到付款的手机网站.有点像诈骗,但倒觉得他是在收集用户信息 2.把网站扔到御剑,搜到phpmyadmin的后台,试试下账号密码居然都是默认 ...
- MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed
问题一 Table xx is marked as crashed and last (automatic?) repair failed 有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL ...
- FL Studio 插件使用技巧——Fruity Reeverb 2 (上)
许多学习FL的用户会发现,自己在听大师的电子音乐作品时都能感受到他们的音乐有一股强大的空间感,有时还能感知到深邃的意境.不少人会因此而疑惑:为什么出自我们之手的音乐就没有这样的效果呢?我们的音乐里到底 ...
- 实现 Application_Start 和 Application_End
理解 ASP.NET Core: 实现 Application_Start 和 Application_End 在 ASP.NET 中两个常用的处理节点是 Application_Start() 和 ...
- Leetcode 周赛#202 题解
本周的周赛题目质量不是很高,因此只给出最后两题题解(懒). 1552 两球之间的磁力 #二分答案 题目链接 题意 有n个空篮子,第i个篮子位置为position[i],现希望将m个球放到这些空篮子,使 ...