Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## AC代码

Posted by WeiSama at 2017-02-12 15:32:27 on Problem 3207
```[code=cpp]#include <cstdio>
#include <algorithm>
//#include <bits/stdc++.h>
//#include <ext/pb_ds/tree_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
using namespace std;

const int M = 1000000 + 5;

void AddEdge(int u, int v) {
}

int idx, num, top, dfn[M], low[M], s[M], sccno[M];

void Tarjan(int u) {
dfn[u] = low[u] = ++idx;
s[++top] = u;
for (int e = head[u]; e; e = nxt[e]) {
int v = to[e];
if (!dfn[v]) {
Tarjan(v);
low[u] = min(low[u], low[v]);
} else if (!sccno[v]) low[u] = min(low[u], dfn[v]);
}
if (low[u] == dfn[u]) {
num++;
while (1) {
int x = s[top--];
sccno[x] = num;
if (x == u) break;
}
}
}

int n, m, a[M], b[M];

int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
scanf("%d%d", &a[i], &b[i]);
if (a[i] > b[i]) swap(a[i], b[i]);
}
for (int i = 0; i < m; i++)
for (int j = i + 1; j < m; j++)
if (a[i] < a[j] && b[i] > a[j] && b[i] < b[j] || a[i] > a[j] && a[i] < b[j] && b[i] > b[j]) {
AddEdge(i << 1, (j << 1) | 1);
AddEdge((i << 1) | 1, j << 1);
AddEdge(j << 1, (i << 1) | 1);
AddEdge((j << 1) | 1, i << 1);
}
for (int i = 0; i < (m << 1); i++)
if (!dfn[i]) Tarjan(i);
for (int i = 0; i < (m << 1); i += 2)
if (sccno[i] == sccno[i ^ 1]) {
printf("the evil panda is lying again");
return 0;
}
printf("panda is telling the truth...");
return 0;
}[/code]```

Followed by: