//开始的时候就以为是个拓扑排序而已,忽略了其中的题目要求最小的解答,然后一直wa,后来仔细考虑以后使用了set作为结构
//使用STL的set的优势在于保证当把入度为0的task输入进去之后头元素最小,而queue不能保证这点
//例如:输入
//3 1;3 5;4 2;4 6;
//正确的输出应该是3 1 4 2 5 6
#include "iostream"
#include "vector"
#include "algorithm"
#include "cstring"
#include "set"
using namespace std;
int in[100100];
vector<int> a[100100];
set<int>s;
void bfs(){
while(!s.empty()){
int n = *s.begin();
s.erase(s.begin());
cout<<n<<" ";
for(int i=0;i<a[n].size();i++){
int v = a[n][i];
if(--in[v]==0){
s.insert(v);
}
}
}
cout<<endl;
}
int main(){
int cases;
int m,n;
cin>>cases;
while(cases--){
memset(in,0,sizeof(in));
memset(a,0,sizeof(a));
s.clear();
cin>>n>>m;
int u,v;
for (int i = 0; i < m; ++i)
{
cin>>u>>v;
a[u].push_back(v);
in[v]++;
}
for (int i = 1; i <= n; ++i)
{
if(!in[i]){
s.insert(i);
}
}
bfs();
}
}
Sicily1940-Ordering Tasks
最新推荐文章于 2016-12-06 13:41:14 发布