字节跳动第三题

输入格式调了半天。。。
#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
把上面代码的queue换成priority_queue
结果就变成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;
}


#笔试题目##字节跳动#
全部评论
直接-1 50%
点赞 回复 分享
发布于 2019-09-22 10:08
用一个拓扑得出序列保存再栈里面。输出栈及ok了啊。
点赞 回复 分享
发布于 2019-09-22 10:12
你保证在有多种选择的时候能先选择最小的领导吗?起码得有优先队列吧
点赞 回复 分享
发布于 2019-09-22 10:12
这道题输入太特么坑人了吧
点赞 回复 分享
发布于 2019-09-22 10:16

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务