poj 2367 Genealogical tree (拓扑排序)
火星人的血缘关系很奇怪,一个人可以有很多父亲,当然一个人也可以有很多孩子。
有些时候分不清辈分会产生一些尴尬。所以写个程序来让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 (拓扑排序)的更多相关文章
- POJ 2367 Genealogical tree 拓扑排序入门题
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8003 Accepted: 5184 ...
- Poj 2367 Genealogical tree(拓扑排序)
题目:火星人的血缘关系,简单拓扑排序.很久没用邻接表了,这里复习一下. import java.util.Scanner; class edge { int val; edge next; } pub ...
- POJ 2367 Genealogical tree 拓扑题解
一条标准的拓扑题解. 我这里的做法就是: 保存单亲节点作为邻接表的邻接点,这样就非常方便能够查找到那些点是没有单亲的节点,那么就能够输出该节点了. 详细实现的方法有非常多种的,比方记录每一个节点的入度 ...
- poj 2367 Genealogical tree
题目连接 http://poj.org/problem?id=2367 Genealogical tree Description The system of Martians' blood rela ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
- poj 2367 Genealogical tree【拓扑排序输出可行解】
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3674 Accepted: 2445 ...
- POJ 2367 Genealogical tree【拓扑排序/记录路径】
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7101 Accepted: 4585 Spe ...
- POJ 2367 Genealogical tree【拓扑排序】
题意:大概意思是--有一个家族聚集在一起,现在由家族里面的人讲话,辈分高的人先讲话.现在给出n,然后再给出n行数 第i行输入的数表示的意思是第i行的子孙是哪些数,然后这些数排在i的后面. 比如样例 5 ...
- POJ 2367 (裸拓扑排序)
http://poj.org/problem?id=2367 题意:给你n个数,从第一个数到第n个数,每一行的数字代表排在这个行数的后面的数字,直到0. 这是一个特别裸的拓扑排序的一个题目,拓扑排序我 ...
随机推荐
- 查看uCOS-II的CPU使用率
代码模板: void main(void) { OSInit(); /* 安装uCOS-II的任务切换向量 */ /* 创建用户起始任务TaskStart */ OSStart(); } void T ...
- 8位灰度图在LCD上显示
一.概述 1.灰度 灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像.每个灰度对象都具有从 0%(白色)到灰度条100%(黑色)的亮度值. 使用黑白或灰度扫描仪生成的图像通常以灰 ...
- Google地图数据算法
Google Maps与Google Earth中的每个级别的每一副图片都有一个URL,例如下面这幅我们学校的图的地址是http://kh.google.com/kh?v=3&t=trstrq ...
- 利用 runtime,解决多次点击相同 button,导致重复跳转的问题-b
当app有点卡的时候,多次点击相同的button,经常出现,跳转了N次相同的界面(比如闲鱼) 解决办法 用运行时和分类,替换 UIControl 响应事件,根据响应的间隔时间来判断是否执行事件. 详细 ...
- C++练习题
1. 用面向对象的程序描述员工拥有的股票,股票有公司,价格,数量属性,且拥有展现基本数据,更新价格,买进,卖出操作,并具有比较两个股票对象股值大小的比较方法. 2. 用面向对象的程序描述一个栈的操作, ...
- codeforces 391C3 - The Tournament
在第8组数据上WA了一天,后来才发现问题: #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- ASP.NET MVC3 Web应用程序中启用GZip压缩示例
http://www.mzwu.com/article.asp?id=3284 自定义一个筛选器,继承于GZipAttribute: using System;using System.IO.Comp ...
- CF192div2-330B - Road Construction
题意:给定n个城市并建造马路是的两两到达,且距离不能超过2 因为0<=m<n/2,所以必然存在某个城市是无限制的,那就可以以这个无限制的城市为中心建造.... 只要想通了真尼玛简单.... ...
- linux 性能分析常规逻辑和手段总结
一. 追查cpu占用较高的进程(线程) 1 . 如何查找出当前系统中占用cpu或者内存最高的进程? ps aux |sort -rn -k 3 |head -n3 查找出当前系统中cpu资源占用前三 ...
- NRE
NRE是Non-Recurring Engineering的缩写,NRE费用即一次性工程费用,是指集成电路生产成本中非经常性发生的开支,明确地说就是新的集成电路产品的研制开发费·新产品开发过程中的设计 ...