Submission #1262383

#TimeUsernameProblemLanguageResultExecution timeMemory
1262383damjandavkovSenior Postmen (BOI14_postmen)C++20
0 / 100
24 ms3776 KiB
#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, m, i, j, k, t, u, hi, lo, md;
    cin >> n >> m;
    vector<int> p(n, 0), o = {0}, d(n);
    vector<vector<pair<int, bool> > > v(n);
    for (k = 0; k < m; k++)
    {
        cin >> i >> j;
        i--;
        j--;
        v[i].push_back({j, 0});
        v[j].push_back({i, 0});
    }
    for (k = 0; k < n; k++)
    {
        d[k] = v[k].size();
        sort(v[k].begin(), v[k].end());
    }
    t = 0;
    for (k = 1; k < m; k++)
    {
        for (; p[t] < v[t].size(); p[t]++)
        {
            if (v[t][p[t]].second)
                continue;
            u = v[t][p[t]].first;
            if (k < m - 1 && d[u] == 1)
                continue;
            hi = v[u].size();
            lo = -1;
            while (hi - lo > 1)
            {
                md = (hi + lo) >> 1;
                if (v[u][md].first > t)
                    hi = md;
                else
                    lo = md;
            }
            v[u][lo].second = v[t][p[t]].second = 1;
            d[t]--;
            d[u]--;
            t = u;
            o.push_back(t);
            break;
        }
    }
    o.push_back(0);
    vector<bool> w(n, 0);
    vector<int> pr(m + 1);
    for (i = 0; i <= m; i++)
        pr[i] = i - 1;
    for (i = 0; i <= m; i++)
    {
        if (w[o[i]])
        {
            cout << o[i] + 1;
            for (j = i - 1; j >= 0 && o[j] != o[i]; j = pr[j])
            {
                w[o[j]] = 0;
                cout << ' ' << o[j] + 1;
            }
            pr[i] = pr[j];
            cout << '\n';
        }
        else
            w[o[i]] = 1;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...