90分求助,#9TLE
查看原帖
90分求助,#9TLE
319478
zhibuba楼主2020/8/21 17:16
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_set>
#include <queue>
#include <iterator>

using namespace std;

unordered_set<int> G[1001];
int grade[1001], indegree[1001];
int n, m;

void build_graph()
{
    cin >> n >> m;
    while (m--)
    {
        int s;
        cin >> s;
        vector<int> a(s), b;
        copy_n(istream_iterator<int>(cin), s, begin(a));
        for (int i = a.front(), j = 0; i <= a.back(); i++)
        {
            if (i == a[j])
                j++;
            else
            {
                for (int v : a)
                    indegree[v] += G[i].insert(v).second;
            }
        }
    }
}

int ans;
queue<int> Q;
void topsort()
{
    for (int i = 1; i <= n; i++)
    {
        if (indegree[i] == 0)
        {
            Q.push(i);
            grade[i] = 1;
        }
    }
    while (!Q.empty())
    {
        int a = Q.front();
        Q.pop();
        for (auto b : G[a])
        {
            indegree[b]--;
            grade[b] = max(grade[b], grade[a] + 1);
            if (indegree[b] == 0)
                Q.push(b);
        }
        ans = max(ans, grade[a]);
    }
}

int main()
{
    ios::sync_with_stdio(false);
    build_graph();
    topsort();
    cout << ans;
    return 0;
}
2020/8/21 17:16
加载中...