Submission #1354992

#TimeUsernameProblemLanguageResultExecution timeMemory
1354992sallySopsug (EGOI23_sopsug)C++20
0 / 100
2 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 300005;

int n, m, k;

vector<int> g[N];        // adjacency (allowed edges)
vector<int> forbid[N];   // forbidden outgoing edges

bool vis[N];
int parent_[N];

bool is_forbidden(int u, int v) {
    for (int x : forbid[u]) {
        if (x == v) return true;
    }
    return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> m >> k;

    // m edges (if present in statement, ignored here if irrelevant to final structure)
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
    }

    // forbidden edges
    for (int i = 0; i < k; i++) {
        int a, b;
        cin >> a >> b;
        forbid[a].push_back(b);
    }

    queue<int> q;
    q.push(0);
    vis[0] = true;
    parent_[0] = -1;

    while (!q.empty()) {
        int u = q.front();
        q.pop();

        for (int v = 0; v < n; v++) {
            if (vis[v]) continue;
            if (is_forbidden(u, v)) continue;

            vis[v] = true;
            parent_[v] = u;
            q.push(v);
        }
    }

    for (int i = 0; i < n; i++) {
        if (!vis[i]) {
            cout << "NO\n";
            return 0;
        }
    }

    cout << "YES\n";
    for (int i = 1; i < n; i++) {
        cout << parent_[i] << " " << i << "\n";
    }

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...