字节跳动第三题
输入格式调了半天。。。
#include <bits/stdc++.h> using namespace std; int main() { string str; vector<vector<int>> vec; int num; while (getline(cin, str)) { stringstream ss(str); vector<int> vec1; while (ss >> num) vec1.push_back(num); vec.push_back(vec1); } int n = vec.size(); vector<vector<int>> adj(n); vector<int> degree(n, 0); for (int i = 0; i < n; i++) for (int j = 1; j < vec[i].size(); j++) { adj[vec[i][j] - 1].push_back(i); ++degree[i]; } queue<int> q; for (int i = 0; i < n; i++) if (degree[i] == 0) q.push(i); vector<int> res; while (!q.empty()) { int cur = q.front(); res.push_back(cur); q.pop(); n--; for (auto next:adj[cur]) if (--degree[next] == 0) q.push(next); } if (n == 0) { for (int i = 0; i < res.size(); i++) { if (i != 0) cout << ' '; cout << res[i] + 1; } } else cout << -1; return 0; }应该找到错误了,上面的代码,输入测试用例
1
2 1
3 2
4 1
5 1 3 4
输出是1 2 4 3 5
2 1
3 2
4 1
5 1 3 4
输出是1 2 4 3 5
把上面代码的queue换成priority_queue
结果就变成1 2 3 4 5了。。
结果就变成1 2 3 4 5了。。
附一下修改后的代码:
#include <bits/stdc++.h> using namespace std; int main() { string str; vector<vector<int>> vec; int num; while (getline(cin, str)) { stringstream ss(str); vector<int> vec1; while (ss >> num) vec1.push_back(num); vec.push_back(vec1); } int n = vec.size(); vector<vector<int>> adj(n); vector<int> degree(n, 0); for (int i = 0; i < n; i++) for (int j = 1; j < vec[i].size(); j++) { adj[vec[i][j] - 1].push_back(i); ++degree[i]; } priority_queue<int, vector<int>, greater<int>> pq; for (int i = 0; i < n; i++) if (degree[i] == 0) pq.push(i); vector<int> res; while (!pq.empty()) { int cur = pq.top(); res.push_back(cur); pq.pop(); n--; for (auto next:adj[cur]) if (--degree[next] == 0) pq.push(next); } if (n == 0) { for (int i = 0; i < res.size(); i++) { if (i != 0) cout << ' '; cout << res[i] + 1; } } else cout << -1; return 0; }