1 solutions

  • -20
    @ 2025-4-7 17:22:28
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 305;
    int n, m, a[N][N], minn, l[N * N];
    set<int>e[N * N], d[N * N];
    
    void topsort() {
    	priority_queue<int> q;
    	for (int i = 1; i <= minn; i++) {
    		if (d[i].size() == 0) {
    			q.push(i);
    		}
    	}
    	while (!q.empty()) {
    		int tmp = q.top();
    		q.pop();
    		cout << tmp << ' ';
    		for (auto i : e[tmp]) {
    			l[i]--;
    			if (l[i] == 0) {
    				q.push(i);
    			}
    		}
    	}
    }
    
    int main() {
    	cin >> n >> m;
    	for (int i = 1; i <= n; i++) {
    		for (int j = 1; j <= m; j++) {
    			cin >> a[i][j];
    			minn = min(minn, a[i][j]);
    			if (i <= 1 && a[i - 1][j] != a[i][j]) {
    				e[a[i - 1][j]].insert(a[i][j]);
    				d[a[i][j]].insert(a[i - 1][j]);
    			}
    		}
    	}
    	for (int i = 1; i <= minn; i++) {
    		l[i] = d[i].size();
    	}
    	topsort();
    	return 0;
    }
    
  • 1

Information

ID
4928
Time
1000ms
Memory
256MiB
Difficulty
9
Tags
(None)
# Submissions
133
Accepted
7
Uploaded By