結果
| 問題 |
No.1509 Swap!!
|
| コンテスト | |
| ユーザー |
mine691
|
| 提出日時 | 2021-04-02 19:59:13 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,571 bytes |
| コンパイル時間 | 3,084 ms |
| コンパイル使用メモリ | 201,848 KB |
| 最終ジャッジ日時 | 2025-01-20 08:00:25 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 |
| other | WA * 1 RE * 29 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using Int = long long;
constexpr static int mod = 1e9 + 7;
constexpr static int inf = (1 << 30) - 1;
constexpr static Int infll = (1LL << 61) - 1;
int Competitive_Programming = (ios_base::sync_with_stdio(false), cin.tie(nullptr), cout << fixed << setprecision(15), 0);
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
struct UnionFind
{
public:
UnionFind() : _sz(0), comp(0) {}
UnionFind(int n) : _sz(n), comp(n), data(n, -1), ptr(n, 0)
{
for (int i = 0; i < n; i++)
ptr[i] = i;
}
bool unite(int x, int y)
{
x = root(x), y = root(y);
if (x == y)
return false;
if (data[x] > data[y])
swap(x, y);
swap(ptr[x], ptr[y]);
comp--, data[x] += data[y], data[y] = x;
return true;
}
int root(int k)
{
if (data[k] < 0)
return k;
return data[k] = root(data[k]);
}
int size(int k)
{
return -data[root(k)];
}
bool same(int x, int y)
{
return root(x) == root(y);
}
int component()
{
return comp;
}
vector<int> get_set(int x)
{
vector<int> res;
int y = x;
res.push_back(x);
while (ptr[y] != x)
{
y = ptr[y];
res.push_back(y);
}
return res;
}
private:
vector<int> data, ptr;
int comp, _sz;
};
int main()
{
int N, A, B;
cin >> N >> A >> B;
UnionFind uf(N);
for (int i = 0; i < N; i++)
{
if (i - A >= 0)
uf.unite(i, i - A);
if (i + A < N)
uf.unite(i, i + A);
if (i - B >= 0)
uf.unite(i, i - B);
if (i + B < N)
uf.unite(i, i + B);
}
cout << (uf.component() == 1 ? "YES\n" : "NO\n");
}
mine691