题意:

一个圆上顺时针放着n个点,现在要连m条边,每条边可以从圆的内部连也可以从圆的外部连。

保证每个点最多连1条边,问是否能使所有的边都不相交。

思路:

典型的2-sat问题。

建图:对于一条边i,在圆内记为i,在圆外记为i'

设边i连接点A,B,边j连接点C,D。i与j在圆内是否相交就是线段AB与线段CD是否相交,用坐标判断一下。

可以证明,如果i与j在圆内不能共存,则在圆外也一定不能共存,即:

i在圆内,则j一定在圆外,建边i->j'

i在圆外,则j一定在圆内,建边i'->j

j在圆内,则i一定在圆外,建边j->i'

j在圆外,则i一定在圆内,建边j'->i


然后用2-sat判断是否可行。

代码(1868K,110MS):

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <utility>
#include <stack>using namespace std;struct Pair{int x, y;Pair() {}Pair(int a, int b) : x(a), y(b) {}
};int n, m, t;
int cnt, num;
vector<int> edges[1002];
Pair p[502];
stack<int> s;
int dfn[1002];
int low[1002];
int vis[1002];
int col[1005];void dfs(int u) {s.push(u);vis[u] = 1;dfn[u] = low[u] = ++cnt;for (int i = 0; i < edges[u].size(); i++) {int v = edges[u][i];if (!dfn[v]) {dfs(v);low[u] = min(low[u], low[v]);} else if (vis[v])low[u] = min(low[u], dfn[v]);}if (low[u] == dfn[u]) {num++;do {t = s.top();s.pop();vis[t] = 0;col[t] = num;} while (t != u);}
}void tarjan() {cnt = num = 0;while (!s.empty()) s.pop();memset(dfn, 0, sizeof(dfn));memset(low, 0, sizeof(low));memset(vis, 0, sizeof(vis));memset(col, 0, sizeof(col));for (int i = 1; i <= m << 1; i++)if (!dfn[i]) dfs(i);
}bool solve() {tarjan();for (int i = 1; i <= m; i++)if (col[i] == col[i + m]) return false;return true;
}int main() {while (~scanf("%d %d", &n, &m)) {for (int i = 1; i <= m << 1; i++)edges[i].clear();int a, b;for (int i = 1; i <= m; i++) {scanf("%d %d", &a, &b);if (a > b) swap(a, b);p[i] = Pair(a, b);}for (int i = 1; i <= m; i++) {for (int j = i + 1; j <= m; j++) {if (p[j].x >= p[i].x && p[j].x <= p[i].y && p[j].y >= p[i].y|| p[j].y >= p[i].x && p[j].y <= p[i].y && p[j].x <= p[i].x) {edges[i].push_back(j + m);edges[j].push_back(i + m);edges[i + m].push_back(j);edges[j + m].push_back(i);}}}bool ans = solve();if (ans) printf("panda is telling the truth...\n");else printf("the evil panda is lying again");}return 0;
}

poj3207 2-SAT相关推荐

  1. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

  2. 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...

    近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...

  3. MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 美国麻省理工学院今天在招生网站上宣布,决定不再考虑将SAT科目考试作为录取过程的一部分. 这一决定从2020~2021学年开始生效. SA ...

  4. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?

    加州大学欧文分校对于SAT成绩的要求是多少?现在申请美国本科,很多都是需要同学们提供sat成绩的额,下面托普仕留学老师为大家介绍SAT多少分才能申请加州大学欧文分校?同学们在申请之前要多注意院校信息. ...

  5. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求

    下面为大家介绍的是加州大学欧文分校University of California Irvine的SAT成绩要求.加州大学欧文分校University of California Irvine是美国加 ...

  6. 如何使用SAP事务码SAT进行UI应用的性能分析

    Sent: Wednesday, July 11, 2012 7:49 PM Subject: [Knowledge share]How to trace UI transaction using S ...

  7. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈

    今天是农历鼠年大年初四,本文是鼠年第4篇文章,也是汪子熙公众号第203篇原创文章. 大家这几天在家里宅得如何了?貌似不少朋友都闷坏了. 我们继续学习. Jerry之前的文章 SAP错误消息调试之七种武 ...

  8. 使用ABAP SAT工具分析SAP OData service实现明细

    Created by Wang, Jerry, last modified on Mar 26, 2015 使用SAT运行OData service测试report: 直接运行report: 确保OD ...

  9. 使用SAT研究IBASE hierarchy读取性能

    Created by Jerry Wang on Mar 06, 2014 1. transaction code SAT,创建一个新的variant例如ZJERRY, 确保Aggregation为N ...

  10. 如何使用SAT trace一个正在运行的程序

    Created by Jerry Wang, last modified on Jul 17, 2014 在SAT tcode中维护需要使用的SAT variant,在这个例子里为ZJERRY.在ta ...

最新文章

  1. 20170817 - 今日技能封装 - A
  2. Java8新特性 Optional类
  3. 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
  4. aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤
  5. linux 查看ip_如何在 Linux 中查看可用的网络接口 | Linux 中国
  6. IAR astyle代码美化
  7. 图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》
  8. 给LINUX添加一个开机执行脚本
  9. 学堂在线计算机通信网络,第二章 数据通信的基础知识 计算机网络笔记 学堂在线 2.4差错控制...
  10. 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  11. Ruby与kiba的初学者etl教程
  12. Java编程笔记9:容器(下)
  13. (转)程序员键盘推荐
  14. 【linux】net-speeder减少由于网络距离过远导致的丢包问题
  15. 外盘期货分仓软件(如智星系统,信管家)等功能
  16. hdu 4544 优先队列+贪心
  17. Linux 不能命令补全,Linux 命令未自动提示补全
  18. JDK的一个Bug,监听文件变更要小心了
  19. 打印机CCC认证费用、周期
  20. mysql搜索结果去重_mysql数据库去重查询

热门文章

  1. 学生兼职工资被拖欠,如何用法律手段追回血汗钱?
  2. 修改mysql的authen_MySQL连接抛出Authentication Failed错误的分析与解决思路
  3. android tf卡 修复工具,sd卡修复工具大师
  4. I Want My Tears Back
  5. 【RX解码MIPI输出】XS9922B 4通道模拟复合视频解码芯片 功能对标TP2815
  6. R语言连续变量正态性检验
  7. 天才黑客,阿里安全科学家吴翰清:做对事只能赢一场,跟对人可以赢一生!...
  8. PS常用快捷键大全(2020版)
  9. 图片文字识别 mysql_有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
  10. Google广告数据分析与优化总结