結果
| 問題 |
No.3056 Disconnected Coloring
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-14 23:00:54 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 217 ms / 2,000 ms |
| コード長 | 1,831 bytes |
| コンパイル時間 | 2,396 ms |
| コンパイル使用メモリ | 209,064 KB |
| 実行使用メモリ | 21,496 KB |
| 最終ジャッジ日時 | 2025-03-14 23:01:05 |
| 合計ジャッジ時間 | 8,813 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 34 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
void solve() {
ll n, m;
cin >> n >> m;
vector g(n, vector<pair<ll, ll>>());
{
bool ok = m % 2 == 0;
rep(i, m) {
ll u, v;
cin >> u >> v, u--, v--;
g[u].emplace_back(v, i);
g[v].emplace_back(u, i);
if ((u == 0 && v == n - 1) || (u == n - 1 && v == 0)) {
ok = false;
}
}
if (!ok) {
cout << "-1\n";
return;
}
}
auto bfs = [&](ll s, ll t) -> vector<bool> {
vector<bool> visited(n, false), used(m, false);
deque<ll> que;
visited[s] = true;
que.push_back(s);
while (!que.empty()) {
ll u = que.front();
que.pop_front();
for (const auto &[v, mi] : g[u]) {
used[mi] = true;
if (visited[v]) {
continue;
}
visited[v] = true;
if (v == t) {
continue;
}
que.push_back(v);
}
}
return used;
};
vector<ll> use_count(m, 0);
{
auto used = bfs(0, n - 1);
rep(mi, m) use_count[mi] += used[mi];
}
{
auto used = bfs(n - 1, 0);
rep(mi, m) use_count[mi] += used[mi];
}
vector<ll> color(m, -1);
ll x = 0;
for (auto s : {0ll, n - 1}) {
for (const auto &[v, mi] : g[s]) {
if (use_count[mi] == 2) {
color[mi] = s > 0;
if (color[mi] == 0)
x--;
else
x++;
}
}
}
rep(mi, m) if (color[mi] == -1) {
if (x < 0) {
x++;
color[mi] = 1;
} else {
x--;
color[mi] = 0;
}
}
rep(mi, m) cout << (color[mi] == 0 ? "B" : "R");
cout << '\n';
}
int main() {
std::cin.tie(nullptr);
std::ios_base::sync_with_stdio(false);
int T = 1;
for (int t = 0; t < T; t++) {
solve();
}
return 0;
}