HDU-4857

题意就是做一个符合条件的排序,用到拓扑序列。

我一开始wa了多发,才发现有几个样例过不了,发现1->2->3...的顺序无法保证。

后来就想用并查集强连,还是wa;

后来发现发用反向拓扑排序+优先队列才可以通过;

这里注意把入度为0的入队改成了出度为0的入队

下面是AC代码:

#include <cstring>
#include<queue>
#include <cstdio>
using namespace std;
vector<int>to[+];
int n,m,cnt;
int outdeed[+],topo [+];
void init(){
memset(outdeed,,sizeof(outdeed));
for(int i=;i<=n;i++)
to[i].clear();
memset(topo,,sizeof(topo));
}
void toposort()
{
priority_queue<int>q;
for(int i=;i<=n;i++)
if(!outdeed[i])q.push(i);
cnt=;
while(!q.empty())
{
int tmp = q.top();
q.pop();
topo[++cnt]=tmp;
int k = to[tmp].size();
for(int i=;i<k;i++)
{
int tt = to[tmp][i];
outdeed[tt]--;
if(outdeed[tt]==)q.push(tt);
}
}
}
void output()
{
for(int i=n;i>=;i--)
printf("%d%c",topo[i],i==?'\n':' ');
}
int main(){
int T;
scanf("%d",&T);
while(T--)
{ scanf("%d%d",&n,&m);
init();
for(int i=;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
to[v].push_back(u);
outdeed[u]++;
}
toposort();
output();
} return ;
}

最新文章

  1. 阿里技术协会好文推荐:Android绘制流程http://click.aliyun.com/m/8719/
  2. 【转】Caffe初试(七)其它常用层及参数
  3. Controller中使用过滤器
  4. php——用for循环打印半金字塔、金字塔、正方形、倒金字塔、菱形、空心图形等
  5. js和jquery获取子元素
  6. HTML5标签改变
  7. (转载)php中实现定时执行计划任务方法
  8. PHP CURL 代理发送数据
  9. SpringMVC 集成redis
  10. IOS开发之XCode学习008:UIViewController基础
  11. Nginx的configure各项中文说明
  12. vue调试工具的安装
  13. JAVA核心技术I---JAVA基础知识
  14. Python3学习笔记32-xlwt模块
  15. html-选择对象
  16. vector容器的注意事项
  17. Spring Boot 的 Security 安全控制
  18. Codeforces 238 div2 B. Domino Effect
  19. Django SimpleCMDB WSGI
  20. python打包成.exe

热门文章

  1. Shell基本语法---常见的条件判断
  2. 洛谷 P3811 题解
  3. “$Bitmap 有标记已使用的未用簇”
  4. [NSNull intValue]: unrecognized selector sent to instance 0x375c9860
  5. PID算法资料【视频+PDF介绍】
  6. How to extract WeChat chat messages from a smartphone running Android 7.x or above
  7. 用泛型写Redis缓存与数据库操作工具类
  8. python使用pip安装第三方库以及镜像使用豆瓣源安装第三方库
  9. iOS的录屏功能
  10. Selenium+java - 日期控件的处理