全部评论
2.6没面
稳的,2道及格
https://www.nowcoder.com/discuss/274216?toCommentId=4215312
bool topo(){
int i,j,n=vec.size();
priority_queue<LL,vector<LL>,greater<LL> > que;
for(i=0;i<n;i++){
if(d[vec[i]]==0)
que.push(vec[i]);
}
while(!que.empty()){
LL u=que.top();que.pop();
res.push_back(u);
for(i=0;i<con[u].size();i++){
LL v=con[u][i];
if(--d[v]==0)
que.push(v);
}
}
return res.size()==vec.size();
}
int main()
{
int i,j;
string line;
while(getline(cin,line)){
stringstream ss(line);
LL u,v;
ss>>v;
vec.push_back(v);
while(ss>>u){
con[u].push_back(v);
d[v]++;
vec.push_back(u);
}
}
sort(vec.begin(),vec.end());
vec.erase(unique(vec.begin(),vec.end()),vec.end());
if(topo())
for(i=0;i<res.size();i++)
printf("%lld%c",res[i]," \n"[i==res.size()-1]);
else
printf("-1\n");
return 0;
}
第三题拓扑排序+优先队列保证最小的先出队。我只过了90%,就不贴了
同问
相关推荐

点赞 评论 收藏
分享
04-24 14:55
安阳师范学院 Java 点赞 评论 收藏
分享