답안 #660404

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
660404 2022-11-21T18:48:40 Z Dec0Dedd Information (CEOI08_information) C++14
100 / 100
448 ms 25532 KB
#include <bits/stdc++.h>

using namespace std;

#define pii pair<short, int>

const int N = 2e3+1;
const int M = 1e6+1;

int c[M], n, m, tin[N], tout[N], t=1;
bool vis[N];
vector<pii> G[N], up[N];
pii e[M];

bool anc(int v, int u) {
    return tin[v] <= tin[u] && tout[u] <= tout[v];
}

void dfs(int v) {
    vis[v]=true; tin[v]=t++;
    for (auto u : G[v]) {
        if (vis[u.first]) continue;
        c[u.second]=1, dfs(u.first);
    }
    tout[v]=t++;
}

void dfs2(int v) {
    vis[v]=true;
    for (auto u : G[v]) {
        if (vis[u.first]) continue;
        if (c[u.second] == 0) {
            c[u.second]=2; dfs2(u.first);
        } else {
            while (up[u.first].size() > 0) {
                pii x=up[u.first].back();
                if (c[x.second] != 0) up[u.first].pop_back();
                else break;
            }
            if (!up[u.first].empty()) {
                c[u.second]=2, c[up[u.first].back().second]=1;
                up[u.first].pop_back();
                dfs2(u.first);
            }
        }
    }
}

int main() {
    cin>>n>>m;
    for (int i=1; i<=m; ++i) {
        int a, b; cin>>a>>b;
        e[i]={a, b};
        G[a].push_back({b, i});
    } dfs(1);

    memset(vis, false, sizeof(vis));

    for (int i=1; i<=n; ++i) {
        for (auto u : G[i]) {
            if (c[u.second] == 0 && anc(i, u.first)) up[u.first].push_back({i, u.second});
        }
    }

    dfs2(1);

    vector<int> l, r;
    for (int i=1; i<=m; ++i) {
        if (c[i] == 1) l.push_back(i);
        else if (c[i] == 2) r.push_back(i);
    }

    if ((int)l.size() < n-1 || (int)r.size() < n-1) cout<<"NONE\n";
    else {
        for (auto u : l) cout<<u<<" ";
        cout<<"\n";
        for (auto u : r) cout<<u<<" ";
        cout<<"\n";
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 2704 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 85 ms 5724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 3224 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 413 ms 20196 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 413 ms 24628 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 448 ms 25532 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 608 KB Output is correct
2 Correct 2 ms 468 KB Output is correct