火星人的血缘关系很奇怪,一个人可以有很多父亲,当然一个人也可以有很多孩子。
有些时候分不清辈分会产生一些尴尬。所以写个程序来让n个人排序,长辈排在晚辈前面。

输入:N 代表n个人 1~n 接下来n行 第i行表示第i个人的孩纸,无序排列,可能为空。0代表一行输入结束。

(大概我的智商真的不合适,否则怎么这么久了连个拓扑排序都写不好,T了三次。。)

代码:

/********************************************
Problem: 2367 User:
Memory: 700K Time: 32MS
Language: G++ Result: Accepted
********************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector> using namespace std; const int N = 105;
int n;
vector<int> G[N];
int RD[N];
int vis[N]; void topsort()
{
for (int j = 1; j <= n; ++j)
for (int i = 1; i <= n; ++i) {
if (!vis[i] && RD[i] == 0) { if (j != 1) printf(" ");
printf("%d", i);
for (int k = 0; k < G[i].size(); ++k)
--RD[G[i][k]];
vis[i] = 1;
break;
}
}
printf("\n");
} int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
int temp;
while (scanf("%d", &temp) == 1) {
if (temp == 0) break;
G[i].push_back(temp);
++RD[temp];
}
}
topsort();
return 0;
}

  

好吧,改了一下第一次的代码也A了,输入的问题= =#

/****************************************
Problem: 2367 User:
Memory: 736K Time: 0MS
Language: G++ Result: Accepted
****************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector> using namespace std; const int N = 105; int mp[N][N]; // mp[i][j] i is j's son
int vis[N];
int n; void read(int i)
{
char ch;
int ans = 0; while (scanf("%d", &ch), ch) {
mp[ch][i] = 1;
++mp[ch][0];
}
} void tpsort()
{
int i, j;
for (j = 1; j <= n; ++j) {
for (i = 1; i <= n; ++i) {
if (!vis[i] && mp[i][0] == 0) {
if (j != 1) printf(" ");
printf("%d", i);
vis[i] = 1; for (int k = 1; k <= n; ++k) {
if (!vis[k] && mp[k][i] == 1) {
mp[k][i] = 0;
--mp[k][0];
}
}
break;
}
}
}
printf("\n");
} int main()
{
scanf("%d", &n);
getchar();
memset(mp, 0, sizeof mp);
memset(vis, 0, sizeof vis);
for (int i = 1; i <= n; ++i) {
read(i);
}
tpsort();
return 0;
}

  

poj 2367 Genealogical tree (拓扑排序)的更多相关文章

  1. POJ 2367 Genealogical tree 拓扑排序入门题

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8003   Accepted: 5184 ...

  2. Poj 2367 Genealogical tree(拓扑排序)

    题目:火星人的血缘关系,简单拓扑排序.很久没用邻接表了,这里复习一下. import java.util.Scanner; class edge { int val; edge next; } pub ...

  3. POJ 2367 Genealogical tree 拓扑题解

    一条标准的拓扑题解. 我这里的做法就是: 保存单亲节点作为邻接表的邻接点,这样就非常方便能够查找到那些点是没有单亲的节点,那么就能够输出该节点了. 详细实现的方法有非常多种的,比方记录每一个节点的入度 ...

  4. poj 2367 Genealogical tree

    题目连接 http://poj.org/problem?id=2367 Genealogical tree Description The system of Martians' blood rela ...

  5. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

  6. poj 2367 Genealogical tree【拓扑排序输出可行解】

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3674   Accepted: 2445 ...

  7. POJ 2367 Genealogical tree【拓扑排序/记录路径】

    Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7101 Accepted: 4585 Spe ...

  8. POJ 2367 Genealogical tree【拓扑排序】

    题意:大概意思是--有一个家族聚集在一起,现在由家族里面的人讲话,辈分高的人先讲话.现在给出n,然后再给出n行数 第i行输入的数表示的意思是第i行的子孙是哪些数,然后这些数排在i的后面. 比如样例 5 ...

  9. POJ 2367 (裸拓扑排序)

    http://poj.org/problem?id=2367 题意:给你n个数,从第一个数到第n个数,每一行的数字代表排在这个行数的后面的数字,直到0. 这是一个特别裸的拓扑排序的一个题目,拓扑排序我 ...

随机推荐

  1. Spring MVC常用的注解

    @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指定,如下 方法一: @Controller ...

  2. 【一起学OpenFOAM】04 OpenFOAM的学习资源

    OpenFOAM的学习资料并不多,个人猜测也许是与软件的类型有关系. 对于商用软件来讲,由于要占领市场,软件开发商自然是巴不得会用软件的人越多越好,因为他们卖的是软件,会用的人越多,软件卖得越好.他们 ...

  3. 优化函数式编程:向 PHP 移植 Clojure 函数

    许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一.不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到.但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ...

  4. 自定义 Lint 规则简介

    上个月,笔者在巴黎 Droidcon 的 BarCamp 研讨会上聆听了 Matthew Compton 关于编写自己的 Lint 规则的讲话.深受启发之后,笔者想就此话题做进一步的探索. 定义 如果 ...

  5. ***PHP各种编码的汉字字符串截取

    虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数.汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需 ...

  6. HDU 1003 Max Sum(DP)

    点我看题目 题意 : 就是让你从一个数列中找连续的数字要求他们的和最大. 思路 : 往前加然后再判断一下就行. #include <iostream> #include<stdio. ...

  7. [模拟]Codeforces509C Sums of Digits

    题目链接 题意:给n个数a[i], 要求b[i]每位数的和等于a[i], 并且b[i]要严格递增 求最小的b[i] b[0]最小一定是X9999...这样的形式 后面的b[i]位数一定大于等于前一个 ...

  8. HLS协议实现

    http://blog.csdn.net/wutong_login/article/details/9673255

  9. .htaccess文件的详解以及404页面的设置

    打开记事本,写入以下代码: ErrorDocument 404 /404.html保存成.htaccess文件上传到网站的根目录. /404.html是目录名和文件名,可以改成自己的名字.QUOTE: ...

  10. java.lang.Boolean为null时

    public class TestBooleanNull { public static void main(String[] args) { if (test()) { System.out.pri ...