結果
問題 | No.3109 Swap members |
ユーザー |
|
提出日時 | 2025-04-19 02:56:14 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 274 ms / 2,000 ms |
コード長 | 1,112 bytes |
コンパイル時間 | 945 ms |
コンパイル使用メモリ | 85,192 KB |
実行使用メモリ | 13,672 KB |
最終ジャッジ日時 | 2025-04-19 02:56:25 |
合計ジャッジ時間 | 9,208 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 52 |
ソースコード
#include <cstdlib> #include <iostream> #include <map> #include <string> #include <vector> struct UnionFind { std::vector<int> par; UnionFind(const size_t n) : par(n, -1) {} int root(const size_t x) { return (par[x] < 0 ? x : par[x] = root(par[x])); } bool unite(size_t x, size_t y) { x = root(x); y = root(y); if (x == y) { return false; } if (par[x] > par[y]) { std::swap(x, y); } par[x] += par[y]; par[y] = x; return true; } inline bool same(const size_t x, const size_t y) { return root(x) == root(y); } }; int main() { int n, k; std::cin >> n >> k; UnionFind uf(n); for (int i = 0; i < n - k; i++) { uf.unite(i, i + k); } std::map<std::string, int> pos; for (int i = 0; i < n; i++) { std::string tmp; std::cin >> tmp; pos[tmp] = i; } bool ng = false; for (int i = 0; i < n; i++) { std::string tmp; std::cin >> tmp; ng |= !uf.same(i, pos[tmp]); } std::cout << (ng ? "No" : "Yes"); }