ural 1022. Genealogical Tree Topological sort

来源:互联网 发布:淘宝卖家在闲鱼卖东西 编辑:程序博客网 时间:2024/06/14 12:43

题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1022


题意描述:原文里里面的英文题目真是又臭又长,精简后的题意很简单,给定有向图的节点和每个节点的对应边,求一个拓扑排序结果;



直接上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();}


0 0
原创粉丝点击