RE on #6
查看原帖
RE on #6
731608
TeraniRetZiger楼主2022/6/26 17:30
#include <bits/stdc++.h>
using namespace std;
int n, m, u, v, p = 1, cnt1, cnt2, del[100010], indeg[100010];
bool flag = 1;
stack<int> s;
vector<int> g[100010];
void dfs(int now) {
    for (int i = del[now]; i < g[now].size(); i = del[now]) {
        del[now] = i + 1;
        dfs(g[now][i]);
    }
    s.push(now);
}
int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i++) scanf("%d%d", &u, &v), g[u].push_back(v), indeg[v]++;
    for (int i = 1; i <= n; i++) {
        if (g[i].size() != indeg[i]) flag = 0;
        if (g[i].size() == indeg[i] + 1) cnt1++, p = i;
        if (g[i].size() == indeg[i] - 1) cnt2++;
    }
    if (!flag && !(cnt1 == cnt2 && cnt2 == 1)) return puts("No");
    for (int i = 1; i <= n; i++) sort(g[i].begin(), g[i].end());
    dfs(p);
    while (!s.empty()) printf("%d ", s.top()), s.pop();
}

别吐码风了,远古代码,将就着看吧。

2022/6/26 17:30
加载中...