现在的位置: 首页 > 综合 > 正文

1940. Ordering Tasks

2019年11月10日 ⁄ 综合 ⁄ 共 468字 ⁄ 字号 评论关闭

貌似是拓扑排序,其实像尾随

#include <iostream>
#include <vector>
#include <set>
using namespace std;
set <int> s;
vector<int> v[100001];
int k[100011] = {0};
  int t,n,m,i,j;
int main(int argc, char const *argv[])
{
  cin >> t;
  while(t--)
  {
    cin >> n >> m;
    while(m--)
    {
      cin >> i >> j;
      v[i].push_back(j);
      k[j]++;
    }
    for( i = 1; i <= n; i++)
      if(k[i] == 0)
        s.insert(i);
    while(!s.empty())
    {
      i = *s.begin();
      cout << i << " ";
      s.erase(s.begin());
      while(!v[i].empty())
      {
      if(--k[v[i].back()] == 0)
      s.insert(v[i].back());
      v[i].pop_back();
      }
    }
    cout << endl;
  }
  return 0;
}        

                         

抱歉!评论已关闭.