結果
| 問題 |
No.274 The Wall
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-29 11:05:46 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 480 ms / 2,000 ms |
| コード長 | 1,548 bytes |
| コンパイル時間 | 1,479 ms |
| コンパイル使用メモリ | 165,464 KB |
| 実行使用メモリ | 132,096 KB |
| 最終ジャッジ日時 | 2025-03-17 18:47:01 |
| 合計ジャッジ時間 | 3,791 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 23 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:54:25: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
54 | rep (i, N) scanf("%d%d", &L[0][i], &R[0][i]);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>
#define rep(i, a) rep2 (i, 0, a)
#define rep2(i, a, b) for (int i = (a); i < (b); i++)
#define repr(i, a) repr2 (i, 0, a)
#define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
using namespace std;
typedef long long ll;
class SCC {
public:
vector<int> cc;
SCC(int n) : G(n), H(n), vis(n), cc(n, -1) {}
void add(int u, int v) {
G[u].push_back(v);
H[v].push_back(u);
}
void build() {
rep (i, G.size()) if (!vis[i]) {
dfs(i);
}
int k = 0;
repr (i, order.size()) if (cc[order[i]] == -1) {
dfs2(order[i], k++);
}
}
private:
vector<vector<int>> G, H;
vector<bool> vis;
vector<int> order;
void dfs(int curr) {
vis[curr] = true;
for (int next : G[curr]) if (!vis[next]) {
dfs(next);
}
order.push_back(curr);
}
void dfs2(int curr, int k) {
cc[curr] = k;
for (int next : H[curr]) if (cc[next] == -1) {
dfs2(next, k);
}
}
};
int main() {
int N, M;
cin >> N >> M;
SCC scc(N * 2);
vector<int> L[2], R[2];
rep (i, 2) {
L[i].resize(N);
R[i].resize(N);
}
rep (i, N) scanf("%d%d", &L[0][i], &R[0][i]);
rep (i, N) {
R[1][i] = M - 1 - L[0][i];
L[1][i] = M - 1 - R[0][i];
}
rep (i, N) rep (j, 2) rep (k, i) rep (l, 2) {
if (i == k) continue;
if (L[j][i] <= R[l][k] && R[j][i] >= L[l][k]) {
scc.add(i + N * j, k + N * !l);
scc.add(k + N * l, i + N * !j);
}
}
scc.build();
bool all = true;
rep (i, N) {
if (scc.cc[i] == scc.cc[i + N]) {
all = false;
}
}
if (all) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}