ural 1022. Genealogical Tree Topological sort
2015-08-20 14:34
531 查看
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1022
题意描述:原文里里面的英文题目真是又臭又长,精简后的题意很简单,给定有向图的节点和每个节点的对应边,求一个拓扑排序结果;
直接上AC代码:
题意描述:原文里里面的英文题目真是又臭又长,精简后的题意很简单,给定有向图的节点和每个节点的对应边,求一个拓扑排序结果;
直接上AC代码:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <string> #include <vector> #include <queue> #include <cmath> #include <map> using namespace std; struct Node{ int parentCount; vector<int>son; Node() :parentCount(0){ son.clear(); } }; void func(){ vector<Node>v; size_t n, i, j, num; Node node; cin >> n; v.resize(n, node); for (i = 0; i < n; i++){ while (cin >> num&&num){ v[i].son.push_back(num - 1); v[num - 1].parentCount++; } } vector<int>ans; queue<int>q; for (i = 0; i < n; i++) { if (v[i].parentCount == 0)q.push(i); } while (!q.empty()){ num = q.front(); q.pop(); ans.push_back(num); int len = v[num].son.size(); for (i = 0; i < len; i++){ j = v[num].son[i]; v[j].parentCount--; if (v[j].parentCount == 0) q.push(j); } } cout << ans[0] + 1; for (i = 1; i < n; i++) cout << ' ' << ans[i] + 1; } int main(){ freopen("out.txt", "w", stdout); freopen("in.txt", "r", stdin); func(); }
相关文章推荐
- 网站性能工具Yslow的使用方法
- 通过Crontab调用HIVE语句对ElasticSearch索引读写操作
- Apache James安装为windows服务
- Upgrade CentOS 7 kernel
- Linux环境PHP7.0安装
- myeclipse与tomcat、jdk的安装和配置
- .bash_profile和.bashrc
- 随tomcat启动的Servlet程序
- 如何缩减网站推广成本?
- 使用OPENCV踩到的坑
- 删除数据表和清空数据表的内容(保存表结构)的SHELL脚本
- centos 6.5 gem install mysql2 / tiny_tds 报错
- Linux安装maven
- docker 实现hello world守护进程
- 非常有用的安卓资源网站~
- windows下使用cmd命令远程重启tomcat服务
- linux 防火墙开端口(转)
- 资源网站
- linux chmod命令
- Linux命令(三)