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';
            }
        }
    }
}
posted @ 2025-08-26 10:15  _Yxc  阅读(3)  评论(0)    收藏  举报