C. Ehab and Path-etic MEXs
https://codeforces.com/contest/1325/problem/C
题意:给定一棵树,现在可以为每个边赋予一个不重复的[0, n-2]的数,并且要求所有的路径中,MEX的最大值最小。
思路:构造问题,找到节点度数大于2的点,然后为三条边赋值0,1,2即可。如果节点度数均为2,则树是一条链,MEX是定值。
总结:一开始考虑的是边如果经过的次数最多,就给他赋予大的权值,思路错了。节点的路径如果有一个叉路,那么在这个叉路上面分配一些数,就可以让mex的值为另一些数了。
inline void solve() {
int n;
cin >> n;
map<pair<int, int>, int> res;
vector<vector<int>> al(n + 1);
vector<pair<int, int>> edges;
for (int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
al[u].push_back(v);
al[v].push_back(u);
edges.emplace_back(u, v);
}
int p = -1;
for (int u = 1; u <= n; ++u) {
if (al[u].size() > 2) {
p = u;
break;
}
}
if (p == -1) {
for (int i = 0; i < n - 1; ++i) {
cout << i << '\n';
}
}
else {
int curU = 0;
int curT = n - 2;
for (const auto& [u, v] : edges) {
if (u == p || v == p) {
cout << (curU ++) << '\n';
}
else {
cout << curT -- << '\n';
}
}
}
}

浙公网安备 33010602011771号