File size: 1,469 Bytes
1fd0050 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
if (!(cin >> n >> m)) return 0;
vector<int> a(10);
for (int i = 0; i < 10; ++i) cin >> a[i];
vector<vector<int>> adj(n + 1);
vector<int> indeg(n + 1, 0), outdeg(n + 1, 0);
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
if (u < 1 || u > n || v < 1 || v > n) continue; // safety
adj[u].push_back(v);
++outdeg[u];
++indeg[v];
}
// Choose start vertex as one with minimal in-degree
int start = 1;
for (int i = 2; i <= n; ++i) {
if (indeg[i] < indeg[start]) start = i;
}
vector<char> visited(n + 1, 0);
vector<int> path;
path.reserve(n);
int cur = start;
visited[cur] = 1;
path.push_back(cur);
while (true) {
int bestScore = -1;
int nxt = -1;
for (int to : adj[cur]) {
if (!visited[to]) {
int score = outdeg[to];
if (score > bestScore) {
bestScore = score;
nxt = to;
}
}
}
if (nxt == -1) break;
cur = nxt;
visited[cur] = 1;
path.push_back(cur);
}
cout << path.size() << '\n';
for (size_t i = 0; i < path.size(); ++i) {
if (i) cout << ' ';
cout << path[i];
}
cout << '\n';
return 0;
} |