题目

liympanda, one of Ikki’s friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many times, he is tired of such easy games and wants to play another game with Ikki.

liympanda has a magic circle and he puts it on a plane, there are n points on its boundary in circular border: 0, 1, 2, …, n − 1. Evil panda claims that he is connecting m pairs of points. To connect two points, liympanda either places the link entirely inside the circle or entirely outside the circle. Now liympanda tells Ikki no two links touch inside/outside the circle, except on the boundary. He wants Ikki to figure out whether this is possible…

Despaired at the minesweeping game just played, Ikki is totally at a loss, so he decides to write a program to help him.

输入格式

The input contains exactly one test case.

In the test case there will be a line consisting of of two integers: n and m (n ≤ 1,000, m ≤ 500). The following m lines each contain two integers ai and bi, which denote the endpoints of the ith wire. Every point will have at most one link.

输出格式

Output a line, either “panda is telling the truth...” or “the evil panda is lying again”.

输入样例

4 2

0 1

3 2

输出样例

panda is telling the truth...

题解

2-sat裸题

如果两条连线的区间有相交,那么就不能同时在圆的一侧

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 1005,maxm = 1000005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}
return out * flag;
}
int n,m,h[maxn],ne = 0;
struct EDGE{int to,nxt;}ed[maxm];
inline void build(int u,int v){
ed[ne] = (EDGE){v,h[u]}; h[u] = ne++;
}
struct node{int l,r;}e[maxn];
inline bool operator <(const node& a,const node& b){
return a.l == b.l ? a.r < b.r : a.l < b.l;
}
int dfn[maxn],low[maxn],Scc[maxn],scci = 0,cnt = 0,st[maxn],top = 0;
void dfs(int u){
dfn[u] = low[u] = ++cnt;
st[++top] = u;
Redge(u)
if (!dfn[to = ed[k].to])
dfs(to),low[u] = min(low[u],low[to]);
else if (!Scc[to]) low[u] = min(low[u],dfn[to]);
if (dfn[u] == low[u]){
scci++;
do{Scc[st[top]] = scci;}while (st[top--] != u);
}
}
int main(){
while (~scanf("%d%d",&n,&m)){
REP(i,m){
e[i].l = read(),e[i].r = read();
if (e[i].l > e[i].r) swap(e[i].l,e[i].r);
}
sort(e + 1,e + 1 + m);
for (int i = 1; i <= m; i++)
for (int j = i + 1; j <= m; j++)
if (e[j].l <= e[i].r && e[j].r >= e[i].r){
build(2 * i,2 * j - 1),build(2 * j,2 * i - 1);
build(2 * i - 1,2 * j),build(2 * j - 1,2 * i);
}
else break;
for (int i = 1; i <= (m << 1); i++) if (!dfn[i]) dfs(i);
bool flag = true;
for (int i = 1; i <= m; i++) if (Scc[2 * i] == Scc[2 * i - 1]){
flag = false; break;
}
if (flag) puts("panda is telling the truth...");
else puts("the evil panda is lying again");
}
return 0;
}

最新文章

  1. connect/express 的参考
  2. JavaScript call
  3. ThinkPHP3.2.3--相对路径的写法
  4. Unable to instantiate Action...............
  5. Xcode运行的错误bug收集
  6. JavaEE5 Tutorial_Jsp,EL
  7. redis学习-day1
  8. CGRect包含交错,边缘,中心的检测
  9. Python3.5入门学习记录-函数
  10. javascript - C++, Qt, QtWebKit: How to create an html rendering window so that your application would get callbacks from JS calls? - Stack Overflow
  11. 【京东详情页】——原生js爬坑之标签页
  12. Redis+Springmvc搭建(附windows下安装)
  13. [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结
  14. RapidJson 的使用
  15. OpenGL矩阵变换,坐标空间变换
  16. vue 安卓5.1 ios9 兼容性 白屏问题
  17. 如果filename的value有值 说明支持存储
  18. RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
  19. 《转》python学习(12)-列表解析
  20. C# DataTbale详细操作

热门文章

  1. 【Python】bytes和hex字符串之间的相互转换。
  2. 海量数据GPS定位数据库表设计
  3. java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
  4. require.js模块化开发
  5. let和const在es6中的异同点
  6. (SSO)单点登录原理和总结
  7. Linux运维企业架构项目实战系列
  8. composer 类加载器,对 &lt;PSR-4的风格&gt;、&lt;PSR-0的风格&gt;、&lt;PEAR的风格&gt; 风格的类的加载
  9. java中常用的swing组件 (2013-10-27-163 写的日志迁移
  10. hadoop启动时权限不足