제출 #1258914

#제출 시각아이디문제언어결과실행 시간메모리
1258914nqknhtPotemkin cycle (CEOI15_indcyc)C++20
30 / 100
8 ms2116 KiB
#include <bits/stdc++.h>

#define ll long long
#define fi first
#define se second
#define len(s) (ll) s.size()
#define LS(x) (1 << x)

const ll I = 3e5 + 9;
const ll Z = 1e9 + 7;

using namespace std;

int u[I], v[I], n, m;
vector<int> adj[1506];

namespace sub1
{
    int dis[156], trace[145];
    bool markE[141][156], off[156], check[145];
    queue<int> q;
    void solve()
    {
        for (int i = 1; i <= m; i++)
            markE[u[i]][v[i]] = markE[v[i]][u[i]] = true;
        for (int i = 1; i <= m; i++)
        {
            memset(off, false, sizeof off);
            for (int j = 1; j <= n; j++)
                if (markE[j][u[i]] && markE[j][v[i]])
                {
                    off[j] = true;
                    // cout << j << "\n";
                }
            memset(dis, 10, sizeof dis);
            memset(check, false, sizeof check);
            dis[u[i]] = 0;
            q.push(u[i]);
            while (!q.empty())
            {
                int af = q.front();
                q.pop();
                if (check[af])
                    continue;
                // cout << af << " " << dis[af] << "\n";
                check[af] = true;
                for (auto z : adj[af])
                {
                    if (off[z] || check[z] || (z == v[i] && af == u[i]))
                        continue;
                    dis[z] = dis[af] + 1;
                    trace[z] = af;
                    q.push(z);
                }
            }
            if (dis[v[i]] >= 3 && dis[v[i]] < n)
            {
                cout << v[i] << " ";
                int cur = v[i];
                while (cur != u[i])
                {
                    cur = trace[cur];
                    cout << cur << " ";
                }
                return;
            }
        }
        cout << "no";
    }
}

int main()
{
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> u[i] >> v[i];
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    // if(n <= 100 && m <= 20000)
    sub1::solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...