QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#878020 | #8591. Shops | Nauclhlt | 24 | 223ms | 43128kb | C++17 | 24.2kb | 2025-02-01 13:06:52 | 2025-02-01 13:06:54 |
Judging History
answer
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#include <random>
using namespace std;
using ll = long long;
template <typename T>
struct Edge
{
int From;
int To;
T Weight;
public:
Edge(int from, int to, T weight)
{
From = from;
To = to;
Weight = weight;
}
};
struct Point
{
public:
int X;
int Y;
Point(int x, int y)
{
X = x;
Y = y;
}
friend bool operator==(Point left, Point right)
{
return left.X == right.X && left.Y == right.Y;
}
friend bool operator<(Point left, Point right)
{
return tie(left.X, left.Y) < tie(right.X, right.Y);
}
};
struct PointHash
{
size_t operator()(Point point)
{
return hash<int>()(point.X) ^ hash<int>()(point.Y);
}
};
class UnionFind
{
private:
vector<int> _parents;
vector<int> _size;
int _vertexCount;
public:
UnionFind(int n)
{
_vertexCount = n;
_parents.resize(n);
_size.resize(n);
for (int i = 0; i < n; i++)
{
_size[i] = 1;
_parents[i] = i;
}
}
int Root(int x)
{
if (_parents[x] == x) return x;
return _parents[x] = Root(_parents[x]);
}
int Size(int x)
{
return _size[Root(x)];
}
void Unite(int x, int y)
{
int rootX = Root(x);
int rootY = Root(y);
if (rootX == rootY) return;
int from = rootX;
int to = rootY;
if (_size[from] > _size[to])
{
swap(from, to);
}
_size[to] += _size[from];
_parents[from] = to;
}
vector<int> Find(int x)
{
int root = Root(x);
vector<int> set;
for (int i = 0; i < _vertexCount; i++)
{
if (Root(i) == root)
{
set.push_back(i);
}
}
return set;
}
unordered_map<int, vector<int>> FindAll()
{
unordered_map<int, vector<int>> sets;
for (int i = 0; i < _vertexCount; i++)
{
int root = Root(i);
if (sets.find(root) != sets.end())
{
sets[root].push_back(i);
}
else
{
sets.emplace(root, vector<int>());
sets[root].push_back(i);
}
}
return sets;
}
bool Same(int x, int y)
{
int rootX = Root(x);
int rootY = Root(y);
return rootX == rootY;
}
void Clear()
{
for (int i = 0; i < _vertexCount; i++)
{
_parents[i] = i;
_size[i] = 1;
}
}
int VertexCount()
{
return _vertexCount;
}
};
template <typename T>
class Imos
{
private:
vector<T> _data;
public:
Imos(int length)
{
_data.resize(length, 0);
}
Imos(vector<T>& array)
{
_data = array;
}
void AddQueryLen(int start, int length, T value)
{
AddQuery(start, start + length, value);
}
void AddQuery(int start, int end, T value)
{
_data[start] += value;
if (end < (int)_data.size())
{
_data[end] -= value;
}
}
void Accumulate()
{
for (int i = 1; i < (int)_data.size(); i++)
{
_data[i] += _data[i - 1];
}
}
vector<T> GetData()
{
return _data;
}
};
template <typename T>
class Imos2D
{
private:
vector<vector<T>> _data;
int _width;
int _height;
public:
Imos2D(vector<vector<T>> data)
{
_data = data;
_height = data.size();
_width = data[0].size();
}
Imos2D(int h, int w)
{
_data.resize(h, vector<T>(w, 0));
_width = w;
_height = h;
}
void AddQuery(int startX, int startY, int endX, int endY, T value)
{
_data[startY][startX] += value;
if (endX < _width)
{
_data[startY][endX] -= value;
}
if (endY < _height)
{
_data[endY][startX] -= value;
}
if (endX < _width && endY < _height)
{
_data[endY][endX] += value;
}
}
void AddQueryLen(int x, int y, int w, int h, T value)
{
AddQuery(x, y, x + w, y + h, value);
}
void Accumulate()
{
for (int x = 1; x < _width; x++)
{
for (int y = 0; y < _height; y++)
{
_data[y][x] += _data[y][x - 1];
}
}
for (int y = 1; y < _height; y++)
{
for (int x = 0; x < _width; x++)
{
_data[y][x] += _data[y - 1][x];
}
}
}
vector<vector<T>> GetData()
{
return _data;
}
};
template<typename T, T OP(T, T), T APPLY(T, T)>
class SegmentTree
{
private:
int _treeSize;
int _dataSize;
int _originalDataSize;
vector<T> _data;
T _identity;
public:
SegmentTree(int n, T identity)
{
_originalDataSize = n;
_identity = identity;
int size = 1;
while (n > size)
{
size <<= 1;
}
_dataSize = size;
_treeSize = 2 * size - 1;
_data.resize(_treeSize, _identity);
}
int OriginalDataSize()
{
return _originalDataSize;
}
int TreeSize()
{
return _treeSize;
}
T Identity()
{
return _identity;
}
void Build(vector<T>& array)
{
if (_originalDataSize != (int)array.size())
{
throw exception();
}
for (int i = 0; i < (int)array.size(); i++)
{
_data[i + _dataSize - 1] = array[i];
}
for (int i = _dataSize - 2; i >= 0; i--)
{
_data[i] = OP(_data[(i << 1) + 1], _data[(i << 1) + 2]);
}
}
void Apply(int index, T value)
{
index += _dataSize - 1;
_data[index] = APPLY(_data[index], value);
while (index > 0)
{
index = (index - 1) >> 1;
_data[index] = OP(_data[(index << 1) + 1], _data[(index << 1) + 2]);
}
}
T Query(int left, int right)
{
return QueryRec(left, right, 0, 0, _dataSize);
}
const T& operator[](size_t index) const
{
return _data[_dataSize - 1 + index];
}
T& operator[](size_t index)
{
return _data[_dataSize - 1 + index];
}
private:
T QueryRec(int left, int right, int index, int l, int r)
{
if (left >= r || right <= l)
{
return _identity;
}
if (left <= l && r <= right)
{
return _data[index];
}
return OP(QueryRec(left, right, (index << 1) + 1, l, (l + r) / 2), QueryRec(left, right, (index << 1) + 2, (l + r) / 2, r));
}
};
template <typename T, typename M, T OP(T, T), T MAPPING(T, M, int), T COMPOSITION(T, T)>
class LazySegmentTree
{
private:
int _treeSize;
int _dataSize;
int _originalDataSize;
vector<T> _data;
vector<optional<T>> _lazy;
T _identity;
public:
LazySegmentTree(int n, T identity)
{
_originalDataSize = n;
_identity = identity;
int size = 1;
while (n > size)
{
size <<= 1;
}
_dataSize = size;
_treeSize = 2 * size - 1;
_data.resize(_treeSize, _identity);
_lazy.resize(_treeSize, nullopt);
}
void Build(vector<T>& array)
{
if (_originalDataSize != (int)array.size())
{
throw exception();
}
for (int i = 0; i < (int)array.size(); i++)
{
_data[i + _dataSize - 1] = array[i];
}
for (int i = _dataSize - 2; i >= 0; i--)
{
_data[i] = OP(_data[(i << 1) + 1], _data[(i << 1) + 2]);
}
}
int TreeSize()
{
return _treeSize;
}
int OriginalDataSize()
{
return _originalDataSize;
}
void Apply(int left, int right, M m)
{
ApplyRec(left, right, m, 0, 0, _dataSize);
}
T Query(int left, int right)
{
return QueryRec(left, right, 0, 0, _dataSize);
}
T GetByIndex(int index)
{
if (index < 0 || index >= _originalDataSize)
{
throw exception();
}
return AccessRec(index, 0, 0, _dataSize);
}
private:
void Evaluate(int index, int l, int r)
{
if (!_lazy[index].has_value())
{
return;
}
if (index < _dataSize - 1)
{
_lazy[(index << 1) + 1] = GuardComposition(_lazy[(index << 1) + 1], _lazy[index]);
_lazy[(index << 1) + 2] = GuardComposition(_lazy[(index << 1) + 2], _lazy[index]);
}
_data[index] = MAPPING(_data[index], _lazy[index].value(), r - l);
_lazy[index] = nullopt;
}
optional<M> GuardComposition(optional<M> a, optional<M> b)
{
if (!a.has_value())
{
return b;
}
else
{
return COMPOSITION(a.value(), b.value());
}
}
void ApplyRec(int left, int right, M m, int index, int l, int r)
{
Evaluate(index, l, r);
if (left <= l && r <= right)
{
_lazy[index] = GuardComposition(_lazy[index], m);
Evaluate(index, l, r);
}
else if (left < r && l < right)
{
ApplyRec(left, right, m, (index << 1) + 1, l, (l + r) / 2);
ApplyRec(left, right, m, (index << 1) + 2, (l + r) / 2, r);
_data[index] = OP(_data[(index << 1) + 1], _data[(index << 1) + 2]);
}
}
T QueryRec(int left, int right, int index, int l, int r)
{
Evaluate(index, l, r);
if (left >= r || right <= l)
{
return _identity;
}
if (left <= l && r <= right)
{
return _data[index];
}
return OP(QueryRec(left, right, (index << 1) + 1, l, (l + r) / 2), QueryRec(left, right, (index << 1) + 2, (l + r) / 2, r));
}
T AccessRec(int target, int index, int l, int r)
{
Evaluate(index, l, r);
if (index >= _dataSize - 1)
{
return _data[index];
}
int mid = (l + r) / 2;
if (target < mid)
{
return AccessRec(target, (index << 1) + 1, l, mid);
}
else
{
return AccessRec(target, (index << 1) + 2, mid, r);
}
}
};
#define CONST_MOD 998244353LL
//#define CONST_MOD 1000000007LL
struct ModInt
{
long long Value;
public:
ModInt()
{
Value = 0L;
}
ModInt(long long value)
{
Value = value;
}
ModInt Power(long long exp) const
{
if (exp <= -1L)
{
return ModInt(1L) / Power(-exp);
}
if (exp == 0L)
return 1L;
if (exp == 1L)
return *this;
ModInt m = Power(exp / 2L);
m = m * m;
if (exp % 2L == 1L)
{
m = m * (*this);
}
return m;
}
ModInt Inv() const
{
return this->Power(CONST_MOD - 2L);
}
ModInt operator+() const
{
return *this;
}
ModInt operator-() const
{
return ModInt(-Value);
}
friend ModInt operator+(const ModInt& left, const ModInt& right)
{
return ModInt(SafeMod(left.Value + right.Value));
}
friend ModInt operator+(const ModInt& left, const long long& right)
{
return ModInt(SafeMod(left.Value + right));
}
friend ModInt operator+(const long long& left, const ModInt& right)
{
return ModInt(SafeMod(left + right.Value));
}
ModInt& operator+=(const ModInt& x)
{
Value += x.Value;
Value = SafeMod(Value);
return *this;
}
ModInt& operator+=(const long long& x)
{
Value += x;
Value = SafeMod(Value);
return *this;
}
friend ModInt operator-(const ModInt& left, const ModInt& right)
{
return ModInt(SafeMod(left.Value - right.Value));
}
friend ModInt operator-(const ModInt& left, const long long& right)
{
return ModInt(SafeMod(left.Value - right));
}
friend ModInt operator-(const long long& left, const ModInt& right)
{
return ModInt(SafeMod(left - right.Value));
}
ModInt& operator-=(const ModInt& x)
{
Value -= x.Value;
Value = SafeMod(Value);
return *this;
}
ModInt& operator-=(const long long& x)
{
Value -= x;
Value = SafeMod(Value);
return *this;
}
friend ModInt operator*(const ModInt& left, const ModInt& right)
{
return ModInt(SafeMod(left.Value * right.Value));
}
friend ModInt operator*(const ModInt& left, const long long& right)
{
return ModInt(SafeMod(left.Value * right));
}
friend ModInt operator*(const long long& left, const ModInt& right)
{
return ModInt(SafeMod(left * right.Value));
}
ModInt& operator*=(const ModInt& x)
{
Value *= x.Value;
Value = SafeMod(Value);
return *this;
}
ModInt& operator*=(const long long& x)
{
Value *= x;
Value = SafeMod(Value);
return *this;
}
friend ModInt operator /(const ModInt& left, const ModInt& right)
{
ModInt inv = right.Inv();
return ModInt(SafeMod(left.Value * inv.Value));
}
friend ModInt operator/(const ModInt& left, const long long& right)
{
return ModInt(SafeMod(left.Value * ModInt(right).Inv().Value));
}
friend ModInt operator/(const long long& left, const ModInt& right)
{
return ModInt(SafeMod(left * right.Inv().Value));
}
ModInt& operator/=(const ModInt& x)
{
Value *= x.Inv().Value;
Value = SafeMod(Value);
return *this;
}
ModInt& operator/=(const long long& x)
{
Value *= ModInt(x).Inv().Value;
Value = SafeMod(Value);
return *this;
}
ModInt& operator++()
{
++Value;
Value = SafeMod(Value);
return *this;
}
ModInt operator++(int)
{
ModInt temp = *this;
Value++;
Value = SafeMod(Value);
return temp;
}
ModInt& operator--()
{
--Value;
Value = SafeMod(Value);
return *this;
}
ModInt operator--(int)
{
ModInt temp = *this;
Value--;
Value = SafeMod(Value);
return temp;
}
inline static ModInt One()
{
return ModInt(1L);
}
static ModInt Combination(long long n, long long r)
{
ModInt c = 1L;
for (ModInt i = 1; i.Value <= r; i++)
{
c = c * (ModInt(n) - i + ModInt::One()) / i;
}
return c;
}
private:
inline static long long SafeMod(long long a)
{
a %= CONST_MOD;
if (a < 0)
{
a += CONST_MOD;
}
return a;
}
};
//
template <typename T>
class Graph
{
private:
vector<vector<Edge<T>>> _graph;
vector<Edge<T>> _edges;
vector<bool> _seen;
unique_ptr<UnionFind> _uf;
int _vertexCount;
public:
Graph(int vertexCount)
{
_vertexCount = vertexCount;
_graph.resize(_vertexCount);
_edges.reserve(_vertexCount);
_seen.resize(_vertexCount);
_uf = NULL;
}
int VertexCount()
{
return _vertexCount;
}
vector<vector<Edge<T>>>& RawGraph()
{
return _graph;
}
vector<Edge<T>>& Edges()
{
return _edges;
}
UnionFind DSU()
{
return *_uf;
}
void AddEdge(int a, int b, T weight)
{
if (!Validate(a) || !Validate(b))
{
return;
}
if (a > b)
{
swap(a, b);
}
_graph[a].push_back(Edge<T>(a, b, weight));
_graph[b].push_back(Edge<T>(b, a, weight));
_edges.push_back(Edge<T>(a, b, weight));
}
void SetupDSU()
{
_uf.reset(new UnionFind(_vertexCount));
for (int i = 0; i < (int)_edges.size(); i++)
{
_uf->Unite(_edges[i].From, _edges[i].To);
}
}
bool Same(int a, int b)
{
if (_uf == nullptr)
{
throw exception();
}
return _uf->Same(a, b);
}
unordered_map<int, vector<int>> GetConnectedComponents()
{
if (_uf == nullptr)
{
throw exception();
}
return _uf->FindAll();
}
void DijkstraFrom(int n, vector<T>& map)
{
if (!Validate(n))
{
return;
}
fill(_seen.begin(), _seen.end(), false);
fill(map.begin(), map.end(), numeric_limits<T>::max());
map[n] = 0;
priority_queue<pair<T, int>, vector<pair<T, int>>, greater<pair<T, int>>> pq;
pq.emplace(0, n);
while (!pq.empty())
{
T c = pq.top().first;
int p = pq.top().second;
pq.pop();
if (_seen[p])
{
continue;
}
_seen[p] = true;
vector<Edge<T>>& ch = _graph[p];
for (int i = 0; i < (int)ch.size(); i++)
{
T w = map[p] + ch[i].Weight;
if (w < map[ch[i].To])
{
map[ch[i].To] = w;
pq.emplace(w, ch[i].To);
}
}
}
}
vector<vector<T>> WarshallFloyd()
{
if (_vertexCount > 800)
{
throw exception();
}
T inf = numeric_limits<T>::max();
vector<vector<T>> map(_vertexCount, vector<T>(_vertexCount, inf));
for (int i = 0; i < _vertexCount; i++)
{
map[i][i] = 0;
}
for (int i = 0; i < (int)_edges.size(); i++)
{
map[_edges[i].From][_edges[i].To] = min(_edges[i].Weight, map[_edges[i].From][_edges[i].To]);
map[_edges[i].To][_edges[i].From] = min(_edges[i].Weight, map[_edges[i].To][_edges[i].From]);
}
for (int k = 0; k < _vertexCount; k++)
{
for (int j = 0; j < _vertexCount; j++)
{
for (int i = 0; i < _vertexCount; i++)
{
if (map[i][k] != inf && map[k][j] != inf)
{
if (map[i][k] + map[k][j] < map[i][j])
{
map[i][j] = map[i][k] + map[k][j];
}
}
}
}
}
return map;
}
void BfsFrom(int n, vector<T>& map)
{
if (!Validate(n))
{
return;
}
fill(_seen.begin(), _seen.end(), false);
map[n] = 0;
queue<pair<int, T>> queue;
queue.emplace(n, 0);
while (!queue.empty())
{
int p = queue.front().first;
T w = queue.front().second;
queue.pop();
if (_seen[p])
continue;
_seen[p] = true;
map[p] = w;
vector<Edge<T>>& ch = _graph[p];
for (int i = 0; i < (int)ch.size(); i++)
{
queue.emplace(ch[i].To, w + ch[i].Weight);
}
}
}
Graph<T> CreateComplement()
{
struct pair_hash {
inline std::size_t operator()(const std::pair<int,int> & v) const {
return v.first ^ v.second;
}
};
unordered_set<pair<int, int>, pair_hash> edgeSet;
for (int i = 0; i < (int)_edges.size(); i++)
{
edgeSet.emplace(_edges[i].From, _edges[i].To);
}
Graph<T> g(_vertexCount);
for (int i = 0; i < _vertexCount - 1; i++)
{
for (int j = i + 1; j < _vertexCount; j++)
{
if (edgeSet.find(make_pair(i, j)) == edgeSet.end())
{
cout << i << ", " << j << endl;
g.AddEdge(i, j, 0);
}
}
}
return g;
}
bool IsBipartite()
{
fill(_seen.begin(), _seen.end(), false);
stack<pair<int, bool>> stack;
vector<bool> memo(_vertexCount);
for (int i = 0; i < _vertexCount; i++)
{
if (_seen[i]) continue;
stack.emplace(i, false);
while (!stack.empty())
{
int n = stack.top().first;
bool c = stack.top().second;
stack.pop();
if (_seen[n])
{
if (memo[n] != c)
{
return false;
}
continue;
}
_seen[n] = true;
memo[n] = c;
vector<Edge<T>>& ch = _graph[n];
for (int j = 0; j < (int)ch.size(); j++)
{
stack.emplace(ch[j].To, !c);
}
}
}
return true;
}
T TreeDiameter()
{
if ((int)_edges.size() != _vertexCount - 1)
{
throw exception();
}
vector<T> dist(_vertexCount);
BfsFrom(0, dist);
T max = 0;
int v = 0;
for (int i = 0; i < _vertexCount; i++)
{
if (dist[i] > max)
{
max = dist[i];
v = i;
}
}
fill(dist.begin(), dist.end(), 0);
BfsFrom(v, dist);
max = 0;
for (int i = 0; i < _vertexCount; i++)
{
if (dist[i] > max)
{
max = dist[i];
}
}
return max;
}
T MaxSpanningTreeWeight()
{
UnionFind unionFind(_vertexCount);
T ans = 0;
auto cmp = [](const Edge<T> &a, const Edge<T> &b)
{
return a.Weight > b.Weight;
};
vector<Edge<T>>& edges = _edges;
sort(edges.begin(), edges.end(), cmp);
for (int i = 0; i < (int)edges.size(); i++)
{
if (!unionFind.Same(edges[i].From, edges[i].To))
{
unionFind.Unite(edges[i].From, edges[i].To);
ans += edges[i].Weight;
}
}
return ans;
}
T MinSpanningTreeWeight()
{
UnionFind unionFind(_vertexCount);
T ans = 0;
auto cmp = [](const Edge<T> &a, const Edge<T> &b)
{
return a.Weight < b.Weight;
};
vector<Edge<T>>& edges = _edges;
sort(edges.begin(), edges.end(), cmp);
for (int i = 0; i < (int)edges.size(); i++)
{
if (!unionFind.Same(edges[i].From, edges[i].To))
{
unionFind.Unite(edges[i].From, edges[i].To);
ans += edges[i].Weight;
}
}
return ans;
}
private:
inline bool Validate(int n)
{
return 0 <= n && n < _vertexCount;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<vector<int>> mst(n, vector<int>());
UnionFind uf(n);
vector<pair<ll, pair<int, int>>> edges;
for (int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
u--;v--;
ll w;
cin >> w;
edges.emplace_back(w, make_pair(u, v));
}
sort(edges.begin(), edges.end());
ll ans = 0;
for (int i = 0; i < edges.size(); i++)
{
int a = edges[i].second.first;
int b = edges[i].second.second;
if (!uf.Same(a, b))
{
uf.Unite(a, b);
mst[a].push_back(b);
mst[b].push_back(a);
ans = max(ans, edges[i].first);
}
}
queue<pair<int, bool>> q;
q.emplace(0, false);
vector<bool> built(n);
vector<bool> seen(n);
while (!q.empty())
{
int p = q.front().first;
bool b = q.front().second;
q.pop();
if (seen[p]) continue;
seen[p] = true;
built[p] = b;
for (int j = 0; j < mst[p].size(); j++)
{
q.emplace(mst[p][j], !b);
}
}
cout << ans << endl;
for (int i = 0; i < n; i++)
{
if (built[i]) cout << "B";
else cout << "D";
}
cout << endl;
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 7
Accepted
time: 1ms
memory: 3712kb
input:
3 3 1 2 3 2 3 1 1 3 2
output:
2 DDB
result:
ok inconveniences = 2
Test #2:
score: 7
Accepted
time: 1ms
memory: 3712kb
input:
5 6 3 2 3 4 2 1 5 3 9 1 3 5 1 4 2 2 3 1
output:
9 DDBBD
result:
ok inconveniences = 9
Test #3:
score: 0
Wrong Answer
time: 24ms
memory: 9576kb
input:
8 135737 1 4 763713071 3 7 45141437 4 8 618418466 6 8 91803956 7 5 972595945 5 2 751163228 2 8 9886315 4 3 106470622 8 6 949495949 1 2 885918825 4 6 322040168 7 6 754489330 4 8 618968328 5 3 996860159 3 6 210132897 3 4 591744987 8 7 447985622 2 4 4833956 5 7 610154418 2 5 410116873 2 5 912717336 8 7...
output:
47935 DDBBDBBB
result:
wrong answer your claimed answer is 47935, but the inconveniences of your plan is actually 19258
Subtask #2:
score: 0
Wrong Answer
Test #11:
score: 0
Wrong Answer
time: 214ms
memory: 42996kb
input:
500000 499999 1 2 776715136 2 3 406881694 3 4 265792290 4 5 507607272 5 6 182246639 6 7 997847597 7 8 164130256 8 9 278962226 9 10 411194641 10 11 363646402 11 12 672225656 12 13 494629089 13 14 717664153 14 15 121619271 15 16 476857704 16 17 301215244 17 18 810217743 18 19 850722975 19 20 10710274 ...
output:
999999116 DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB...
result:
wrong answer your claimed answer is 999999116, but the inconveniences of your plan is actually 998789691
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 24
Accepted
Test #31:
score: 24
Accepted
time: 147ms
memory: 34668kb
input:
366489 397001 2 127909 1 7 171229 1 8 158597 1 11 282213 1 14 356007 1 15 286102 1 16 93205 1 17 260111 1 18 138962 1 20 359938 1 29 223905 1 31 357684 1 32 259968 1 34 65205 1 37 200276 1 41 83195 1 43 159858 1 48 332277 1 50 320322 1 51 338467 1 53 262785 1 55 83815 1 56 173198 1 58 169473 1 63 19...
output:
1 DDBBBBDBDBBBBDDDBBBBBDBBDDDDBBDDBBDBBBBBBDBBBBBDBBBBBDDDDBBDBBDDDDBBBBBBDDDBDDDBBBDDDDBDDDDBBBBDDBBBBDBDDDBBDBDBDBBBBDBDDBDDBDBBBDBBBDDBBDDDBBBDDBDBDDBDDDBDBDBBDBDBDBDBDBBDDBDBBDBBBBDBBBDDDBBDDDDDDDDDDDDBBBBDBDBDBBBBDDDBBBBDBDBDBDBDDDDBBBBBDDDBBBBDBBBDBBDBBDDDDBBDBDBDBDBDBBDBDDBBDDDBBDDBDDBBDDBDBB...
result:
ok inconveniences = 1
Test #32:
score: 24
Accepted
time: 209ms
memory: 41548kb
input:
475552 488952 2 161263 1 3 312211 1 5 41910 1 6 421865 1 7 340911 1 9 419906 1 10 468773 1 13 17837 1 18 465833 1 19 297766 1 21 234125 1 26 218984 1 28 296050 1 29 411520 1 30 38207 1 33 370786 1 34 21620 1 35 467168 1 40 136766 1 42 353240 1 44 194443 1 46 119022 1 48 23233 1 54 380603 1 60 99339 ...
output:
1 DDBBDBDBBBDDBDDDDBBDBBBBBDBDDDDDBDBBBDBBDBBBDDBBBDDDDDDBDDBDBDBDDDBBDDDBBBBBBBDBDDBBBBBDDDDDBDBDDDBBDDBDDBBDBDBBBBBBDDDDBBBBDBBBBBDDDDBBDDBBDBBDBDBBBBBDBDBBDDBDDDBBBDBDBDDBDDDBDBDDDBDDDDBDDDDBDBDBBDDDBBDBDBDDBBBDBDBBDDDDDDBBDBDBBDDBDDDBBBBDDBDBBDBBBBDBDBDBDDBDDDDDBDBBDBDBBBBDBDDBDDBBDDDBDDDBDBDBBD...
result:
ok inconveniences = 1
Test #33:
score: 24
Accepted
time: 42ms
memory: 15584kb
input:
128817 140020 2 53427 1 5 86824 1 6 33490 1 11 63864 1 14 109608 1 15 12909 1 16 45790 1 19 27271 1 22 54044 1 24 11063 1 32 53692 1 35 70034 1 38 84224 1 39 64068 1 43 72895 1 44 51948 1 45 40428 1 49 127824 1 50 52852 1 60 25795 1 61 105666 1 65 41013 1 67 97450 1 69 49349 1 71 47569 1 72 70751 1 ...
output:
1 DDBDDBBBBDDDDBDDDBBDDDDDBBBBDDDDDDBDBDBDDDBBDDDDDDDBBBDDDBBBDBBDBBDBDDDDBBBBBBBBDBBDBDDBBDDDBDDDBDBDBDDDDDBBBBDBBDDDBDDBDBBDBBDDBBBDDBBBBDDBDBDDDDDDDDBBBBBBDBBDDBBDDDBDDDDBBBDBDDDBDDBBBBDBDDDDBBBDDBBDDDDBBBBDDBDBBBBBBBBBBDBDDBDBBBDDBDBBDDDBBBDDBBDDBBDDDDDDDBBDDDDDBBDDBBDDDBBDBDBDBDBDBBBDDBBBBBDBBB...
result:
ok inconveniences = 1
Test #34:
score: 24
Accepted
time: 120ms
memory: 28412kb
input:
299635 331829 5 197808 1 11 67054 1 12 84275 1 15 287112 1 16 274955 1 24 40825 1 30 266299 1 34 81379 1 35 99815 1 38 219853 1 42 189961 1 47 107895 1 48 137516 1 50 80614 1 54 264232 1 55 93625 1 62 143056 1 63 70844 1 64 72811 1 65 164091 1 68 248158 1 70 9821 1 72 156352 1 77 215022 1 81 270025 ...
output:
1 DDBDDDBDBDDBBDDDDDBDBBBBDDDBBDBBDBBBBBBBBBDDBDDDBDBBDDDBDDDDDDDDBDBDBDBBDBBBBDBDBBDBBBDBDBDBDDBDDDDDDBDDDDBDDDBBBBDBBDBBDBBDDBDBBDDBDBDDBBDBDDBBBBBDDBDBBBDBBBBBDDDBDBDDBDBBDDDDBBDDDBDBDBDBDBDDDBBDDBDBDBBBDBBBDDBDDDDDBBDDBDDBBBBDBDDDBBDBDBBDDBBDDDDBDBDDDBBDDDDDBDBBBBBDBBDDDBDDBBBBBBBBBDBDDDBDBDDDBB...
result:
ok inconveniences = 1
Test #35:
score: 24
Accepted
time: 166ms
memory: 34968kb
input:
369927 447544 1 150509 1 5 250257 1 6 149327 1 7 201307 1 15 330381 1 16 158914 1 18 99391 1 24 90164 1 25 199087 1 28 306199 1 32 83429 1 35 212184 1 36 29977 1 37 261629 1 44 99341 1 45 48378 1 51 130523 1 53 148929 1 58 77382 1 71 211093 1 72 305907 1 73 227420 1 75 188876 1 76 71437 1 79 354402 ...
output:
1 DBDBBBDBDDDBDDDBDBBDDBDBDBBDDDBDBDDDDDDBBDDBBDDBDBDDBBDDDDBBBBBBBBBDDDBDDBDBBBDBBDBBBBDBBDDBDDDDDBDBBDBDDDDDBDDDBDBDDDBDBDBBBBBDBBBBDBDBDDDBDBDDDDBBBBDDDBDDDBBDDBBBDBBDDDDDDBDBBBBDBBBBDBDDBBDDBBBDDBBDDBBBDBDDBBBBBBBDBDBBBDBBDDBDBBDDBBDBBDBDBBBBDDBBBBBBDBBBDBDBBDDDDDBDDBBBBDBBBBBDBDDBDBDBDBBDBDBBBD...
result:
ok inconveniences = 1
Test #36:
score: 24
Accepted
time: 212ms
memory: 43124kb
input:
500000 500000 4 319400 1 12 186157 1 13 443669 1 15 227339 1 19 101284 1 20 183604 1 23 273179 1 26 236933 1 27 79090 1 28 826 1 29 7574 1 31 370188 1 32 48463 1 34 113530 1 35 209157 1 46 13739 1 47 188127 1 48 97203 1 51 251724 1 52 469749 1 53 451782 1 56 249224 1 58 262324 1 60 380990 1 61 82320...
output:
1 DDDDDDDBDDBDDDDBDBBBDDBBDDDBDBDDBBBBDDDDBDDDBBBDBDDBBDBBDBDBDDDBBBDBDBBDDBDBDBBDBBDBBDBBBDBDDDDDDDBDBBDDBDDBDDBDBBDDDDDBDBDBBBDDDBBDBDBBBDBBDDDDDBBDBDBBDBBDBDDDBBBBDDDDDDDBBDBBBBBDBDDDBDDDBBBDDDBBDBDDDDBBDDBBDBDDBDBDDDBDBBDBBBDDBDBBBDBBBBDBBDDBBDDDDDBDDDBDBDBDBBBDDDBBDDDDBBDBBDBBBBBDBDBBDDBDDBDBDB...
result:
ok inconveniences = 1
Test #37:
score: 24
Accepted
time: 202ms
memory: 43124kb
input:
500000 500000 2 182927 1 5 313016 1 9 438269 1 10 97892 1 11 373266 1 13 314494 1 14 318813 1 20 102513 1 23 304478 1 24 162451 1 27 207273 1 30 182950 1 34 133161 1 35 62401 1 37 102023 1 38 19183 1 41 96619 1 42 264471 1 45 339682 1 46 60188 1 51 134306 1 53 85702 1 54 170539 1 55 74017 1 73 14900...
output:
1 DDBBBDDDDDBDDDBDBDDBBDDDDDDDBDBBDBBDDBBBDBDBDBBBBDBBDDDDBDDDBBBDDDBDBDBDDBDDBBDBBBDBDBDDBBDDBDDDBBBBDBBBBBDBBBBBBBDBDDDBDDDBDDBDBBDDBDBBBBDBDDBBBDBBDDDBDDDBBDDDBBBBBDBBBDBDDDBDDBBBDDDDBDBDDBDBDBBDBDBDBBDBDDBBDBDDBBBBDBDBDBBDDBBDBDDDDBDDBBBBDDDBBBDBBBDDDBDBDBBBBBDDDDDBDBDDBDBDBDDDBBDDBBBBBDDBDBDBBB...
result:
ok inconveniences = 1
Test #38:
score: 24
Accepted
time: 200ms
memory: 43120kb
input:
500000 500000 4 490349 1 5 377743 1 7 261998 1 14 410844 1 17 106150 1 20 477772 1 22 48037 1 24 388329 1 26 328805 1 28 248860 1 30 216330 1 34 479575 1 37 303722 1 38 392533 1 40 191119 1 42 177919 1 44 322555 1 45 306160 1 50 129452 1 51 215260 1 53 146880 1 56 441549 1 64 249852 1 69 422318 1 70...
output:
1 DBBBDBDBBDDBBBDBBBDBBDDDBDBBDDBDDBDDBDDBBDDDBBDDBBDDDDBBDDBDBBDBBDBDBBBBDDDBBBDBDDBBDBDDBBDBBDDBDBBDBBBDDDBDDBBBDBDDDBBDDDBDBDBBDDBBBBDDBDDDDDBBBBDDDBDBBDDBDDDBBBDBDDDBBBBBBBDBDDDDBDBDDDDDDBDBBDBDDDDBDBBBDBDDBBDBBDDDDBBBBBBDBDDDBBDDBDDBDBBBDDBDDDBDDBBDBDDDBBDBBDDDDBBBBBDBBDBDDBDBBBDBBBBBBBBBDBDBBD...
result:
ok inconveniences = 1
Test #39:
score: 24
Accepted
time: 203ms
memory: 43128kb
input:
500000 500000 9 213713 1 13 307012 1 14 327287 1 16 103990 1 23 409412 1 24 80587 1 25 91210 1 26 413674 1 28 167751 1 29 223056 1 31 395367 1 34 70127 1 38 344870 1 39 499865 1 40 91257 1 41 443805 1 43 109678 1 47 387825 1 49 328529 1 53 186674 1 59 197682 1 60 27560 1 61 402852 1 64 380750 1 66 1...
output:
1 DBBBBDDBBBDDBDDBBDDBBBBDBDDDDBDBDDDDBDBDDDBDBDDBBDBBDBDDBDBDDBBDBBBBBDBDBDBDDDDBDBBBDDBBDDDBBDBDDBBBBBDBBDDBBDDBBBBDBBDBDDBDBBDBBDDBBDDDDDBDBDDBDDBDDDBBDBDDDDBBBDBBBBDBBBDDBDBBDDBBBBBDBDBBBBBDDBDBBDDBBBBDDBBBBBBBBBDDDDDDBDBBBDBDDBDBBDDDDDDDDBDDBDDDBBBDBBBDBBBDDDDDDDBDBDDDBBBDDBDBBBBDBDBBBBDBBBDBDB...
result:
ok inconveniences = 1
Test #40:
score: 24
Accepted
time: 223ms
memory: 43128kb
input:
500000 500000 1 420147 1 2 70976 1 5 354943 1 6 261427 1 9 317379 1 11 31032 1 15 419781 1 16 155356 1 19 459807 1 25 72438 1 28 385731 1 30 19123 1 34 18208 1 35 332853 1 39 338723 1 41 356728 1 42 114047 1 44 389270 1 47 112208 1 48 23788 1 52 312381 1 57 317756 1 60 311741 1 61 218196 1 62 182171...
output:
1 DBDDBBBBBBDBDBDDDBBBDBBDDBBBDBBDBBDBDDDDBBDBBDBDBDBBDDDDBBDDBBBBBDBBBBDBBBDBDDDDBBBDBDBBBBDDDDDDDDDBDDBDDBDDDDBDBDBDBBDDDDBDDDBDBDBBBBBDBBBDDBBBBBDDDDDBBBBBBDDBDBDDDBDBDBBBBDBBBBDDDDDDDDDDDDDDDDDDDDBBBBBBBBBDDDBDDDBDDDBDDBBBDBDDDDBDBBDDDBDDDBDBBDDDBDDBDDBDDBBDDDBBDDBBBDDBDDBBBDDDDBDBDDDBBDDDBBBBDD...
result:
ok inconveniences = 1
Subtask #5:
score: 0
Skipped
Dependency #1:
0%