結果
| 問題 |
No.483 マッチ並べ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-05-05 15:49:29 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,354 bytes |
| コンパイル時間 | 891 ms |
| コンパイル使用メモリ | 88,976 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-14 08:42:04 |
| 合計ジャッジ時間 | 2,389 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 53 |
ソースコード
#include <iostream>
using namespace std;
struct iostream_init_struct
{
iostream_init_struct()
{
std::cin.tie(0);
std::cin.sync_with_stdio(false);
}
} iostream_init;
#include <unordered_map>
template <class TYPE, class TYPE_HASH>
class union_find
{
private:
std::unordered_map<TYPE, TYPE, TYPE_HASH> parent_;
std::unordered_map<TYPE, int, TYPE_HASH> loop_;
public:
TYPE find(TYPE x)
{
auto itr = parent_.find(x);
if (itr == parent_.end())
return x;
else
{
TYPE parent = itr->second;
return parent_[x] = find(parent);
}
}
// returns num of loop
int unite(TYPE x, TYPE y)
{
TYPE x_parent = find(x);
TYPE y_parent = find(y);
if (x_parent == y_parent)
{
return loop_[x_parent] += 1;
}
parent_[y_parent] = x_parent;
int ret = loop_[x_parent] += loop_[y_parent];
loop_.erase(y_parent);
return ret;
}
bool is_same(TYPE x, TYPE y)
{
return find(x) == find(y);
}
};
class PairHash
{
public:
size_t operator()(const pair<int, int>& obj) const
{
return obj.first * 1000 + obj.second;
}
};
int main(void)
{
union_find<pair<int, int>, PairHash> m;
int N;
cin >> N;
for (int i = 0; i < N; ++i)
{
int r0, c0, r1, c1;
cin >> r0 >> c0 >> r1 >> c1;
if (m.unite(make_pair(r0, c0), make_pair(r1, c1)) >= 2)
{
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl;
return 0;
}