poj3207 2-SAT
题意:
一个圆上顺时针放着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相关推荐
- 模板 - 2 - SAT问题
整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...
- 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...
近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...
- MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 美国麻省理工学院今天在招生网站上宣布,决定不再考虑将SAT科目考试作为录取过程的一部分. 这一决定从2020~2021学年开始生效. SA ...
- 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?
加州大学欧文分校对于SAT成绩的要求是多少?现在申请美国本科,很多都是需要同学们提供sat成绩的额,下面托普仕留学老师为大家介绍SAT多少分才能申请加州大学欧文分校?同学们在申请之前要多注意院校信息. ...
- 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求
下面为大家介绍的是加州大学欧文分校University of California Irvine的SAT成绩要求.加州大学欧文分校University of California Irvine是美国加 ...
- 如何使用SAP事务码SAT进行UI应用的性能分析
Sent: Wednesday, July 11, 2012 7:49 PM Subject: [Knowledge share]How to trace UI transaction using S ...
- 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
今天是农历鼠年大年初四,本文是鼠年第4篇文章,也是汪子熙公众号第203篇原创文章. 大家这几天在家里宅得如何了?貌似不少朋友都闷坏了. 我们继续学习. Jerry之前的文章 SAP错误消息调试之七种武 ...
- 使用ABAP SAT工具分析SAP OData service实现明细
Created by Wang, Jerry, last modified on Mar 26, 2015 使用SAT运行OData service测试report: 直接运行report: 确保OD ...
- 使用SAT研究IBASE hierarchy读取性能
Created by Jerry Wang on Mar 06, 2014 1. transaction code SAT,创建一个新的variant例如ZJERRY, 确保Aggregation为N ...
- 如何使用SAT trace一个正在运行的程序
Created by Jerry Wang, last modified on Jul 17, 2014 在SAT tcode中维护需要使用的SAT variant,在这个例子里为ZJERRY.在ta ...
最新文章
- 20170817 - 今日技能封装 - A
- Java8新特性 Optional类
- 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
- aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤
- linux 查看ip_如何在 Linux 中查看可用的网络接口 | Linux 中国
- IAR astyle代码美化
- 图书封面的故事之——“巴别塔”选自《七周七语言:理解多种编程范型》
- 给LINUX添加一个开机执行脚本
- 学堂在线计算机通信网络,第二章 数据通信的基础知识 计算机网络笔记 学堂在线 2.4差错控制...
- 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
- Ruby与kiba的初学者etl教程
- Java编程笔记9:容器(下)
- (转)程序员键盘推荐
- 【linux】net-speeder减少由于网络距离过远导致的丢包问题
- 外盘期货分仓软件(如智星系统,信管家)等功能
- hdu 4544 优先队列+贪心
- Linux 不能命令补全,Linux 命令未自动提示补全
- JDK的一个Bug,监听文件变更要小心了
- 打印机CCC认证费用、周期
- mysql搜索结果去重_mysql数据库去重查询
热门文章
- 学生兼职工资被拖欠,如何用法律手段追回血汗钱?
- 修改mysql的authen_MySQL连接抛出Authentication Failed错误的分析与解决思路
- android tf卡 修复工具,sd卡修复工具大师
- I Want My Tears Back
- 【RX解码MIPI输出】XS9922B 4通道模拟复合视频解码芯片 功能对标TP2815
- R语言连续变量正态性检验
- 天才黑客,阿里安全科学家吴翰清:做对事只能赢一场,跟对人可以赢一生!...
- PS常用快捷键大全(2020版)
- 图片文字识别 mysql_有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
- Google广告数据分析与优化总结