HDU 1285 确定比赛名次
2016-04-20 09:37
267 查看
拓扑排序。我直接就按照拓扑排序的定义写的,因为要小号在前面,所以用到了小顶堆,因为格式错误,WA了一次。
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <queue> using namespace std; const int MAX = 505; int cnt[MAX]; int res[MAX]; int flag[MAX]; vector<int> v[MAX]; //queue<int> ans; int main() { int n, m; priority_queue<int, vector<int>, greater<int> > ans; while (scanf("%d%d", &n, &m) != EOF) { int from, to; int tmp_cnt = 0; memset(cnt, 0, sizeof(cnt)); memset(res, 0, sizeof(res)); memset(flag, 0, sizeof(flag)); // ans.clear(); for (int i = 1; i <= n; ++i) v[i].clear(); for (int i = 0; i < m; ++i) { scanf("%d%d", &from, &to); cnt[to]++; v[from].push_back(to); } for (int i = 1; i <= n; ++i) { if (cnt[i] == 0) { ans.push(i); //res[tmp_cnt++] = i; //flag[i] = 1; //cout << "i = " << i << endl; //break; } } //cout << ans.top() << endl; while (!ans.empty()) { int tmp_v = ans.top(); //cout << "during the while loop " << ans.top() << endl; if (!flag[tmp_v]) res[tmp_cnt++] = tmp_v; flag[tmp_v] = tmp_v; ans.pop(); int lenth = v[tmp_v].size(); for (int i = 0; i < lenth; ++i) { if (--cnt[v[tmp_v][i]] == 0) { ans.push(v[tmp_v][i]); //cout << "v[tmp_v][i] = " << v[tmp_v][i] << endl; } } } //cout << "tmp_cnt = " << tmp_cnt << endl; for (int i = 0; i < tmp_cnt - 1; ++i) printf("%d ", res[i]); printf("%d\n", res[tmp_cnt - 1]); } return 0; }
相关文章推荐
- 关于Java调用32/64位dll的问题
- VS学习笔记--数组
- iOS中的小知识点
- eclipse项目红色叹号解决方法 eclipse导入jar包
- 【linux】linux DD命令
- 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统
- 8个女大学生为赚带工费 走私游戏碟被海关截获
- stl hashmap与map hashmap与hashtable
- sql中的group by 和 having 用法解析
- 《学习笔记》android6.0 锁屏壁纸功能
- thinkphp多数据库配置,使用
- CSS3---媒体查询与响应式布局
- Activity和layout的关系,activity的启动模式
- 下载徐小明新浪博客全部博文链接
- 内存的数据区域
- 基于SpringMVC的文件上传
- 配置tomcat将控制台日志输出到指定文件
- 从关系型数据库到非关系型数据库
- 安卓手持智能POS端上能扫描开单的软件-店面销售开单系统
- ajax post表单提交方法