Submission #1355768

#TimeUsernameProblemLanguageResultExecution timeMemory
1355768sallySopsug (EGOI23_sopsug)C++20
0 / 100
5094 ms1114112 KiB
#include<iostream>
#include<vector>
#include<set>
using namespace std;
const int mx = 3e5+5;
typedef pair<int,int> pii;
int N, M, K;
vector<vector<int>> must(mx);
vector<set<int>> no(mx);
vector<int> in(mx, 0);
vector<bool> vis(mx, false);
vector<pii> ans;
bool flag = false;
void dfs(int now) {
    vis[now] = 1;
    for(int nxt:must[now]) {
        dfs(nxt);
        ans.push_back({nxt, now});
    }
    for(int nxt = 0; nxt<N; nxt++) {
        if(no[now].find(nxt)!=no[now].end()) continue;
        if(vis[nxt]) continue;
        ans.push_back({nxt, now});
        dfs(nxt);
    }
}
bool check() {
    for(int i=0; i<N; i++) {
        if(in[i]>1) return false;
        for(int j:must[i]) {
            if(no[i].find(j)!=no[i].end()) return true;
        }
    }
    return false;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>N>>M>>K;
    vector<bool> v(mx, false);
    for(int i=0; i<M; i++) {
        int a, b;
        cin>>a>>b;
        must[b].push_back(a); // reverse
        in[a]++;
        v[a] = 1;
    }
    for(int i=0; i<K; i++) {
        int a, b;
        cin>>a>>b;
        no[b].insert(a); // reverse
    }
    if(check()) {
        cout<<"NO";
        return 0;
    }
    int now;
    vis = v;
    for(int i=0; i<N; i++) {
        if(vis[i]) continue;
        now = i;
        dfs(now);
    }
    ans.clear();
    vis = v;
    dfs(now);
    for(int i=0; i<N; i++) {
        if(ans.size()!=N-1) {cout<<"NO"; return 0;}
    }
    for(auto [x, y]:ans) cout<<x<<' '<<y<<'\n';
}
#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...