1 solutions

  • 0
    @ 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
    130
    Accepted
    7
    Uploaded By