結果

問題 No.274 The Wall
ユーザー kazuma
提出日時 2017-06-25 20:31:58
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 354 ms / 2,000 ms
コード長 1,771 bytes
コンパイル時間 1,851 ms
コンパイル使用メモリ 177,880 KB
実行使用メモリ 132,864 KB
最終ジャッジ日時 2024-06-22 02:17:25
合計ジャッジ時間 3,659 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
struct Edge {
int from, to;
Edge(int f, int t) : from(f), to(t) {}
};
using Edges = vector<Edge>;
using Graph = vector<Edges>;
vector<int> tarjan(const Graph& g) {
int n = g.size(), idx = 0, k = 0, s = 0;
vector<int>ord(n, -1), low(n), onS(n), cmp(n), stk(n);
function<void(int)> dfs = [&](int v) {
ord[v] = low[v] = idx++;
stk[s++] = v;
onS[v] = true;
for (auto &e : g[v]) {
int w = e.to;
if (ord[w] == -1) {
dfs(w);
low[v] = min(low[v], low[w]);
}
else if (onS[w]) {
low[v] = min(low[v], ord[w]);
}
}
if (low[v] == ord[v]) {
while (1) {
int w = stk[--s];
onS[w] = false;
cmp[w] = k;
if (w == v)break;
}
++k;
}
};
for (int v = 0; v<n; ++v)
if (ord[v] == -1)dfs(v);
return cmp;
}
int main()
{
int N, M;
cin >> N >> M;
vector<int> L1(N), R1(N);
vector<int> L2(N), R2(N);
for (int i = 0; i < N; i++) {
cin >> L1[i] >> R1[i];
R2[i] = M - 1 - L1[i];
L2[i] = M - 1 - R1[i];
}
Graph G(N * 2);
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
if (!(R1[i] < L1[j] || R1[j] < L1[i])) {
G[i].push_back(Edge(i, N + j));
G[j].push_back(Edge(j, N + i));
}
if (!(R1[i] < L2[j] || R2[j] < L1[i])) {
G[i].push_back(Edge(i, j));
G[N + j].push_back(Edge(N + j, N + i));
}
if (!(R2[i] < L1[j] || R1[j] < L2[i])) {
G[N + i].push_back(Edge(N + i, N + j));
G[j].push_back(Edge(j, i));
}
if (!(R2[i] < L2[j] || R2[j] < L2[i])) {
G[N + i].push_back(Edge(N + i, j));
G[N + j].push_back(Edge(N + j, i));
}
}
}
auto v = tarjan(G);
bool res = true;
for (int i = 0; i < N; i++) {
if (v[i] == v[i + N]) {
res = false;
}
}
cout << (res ? "YES" : "NO") << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0