hdu1285(拓扑排序)
2015-09-20 21:23
253 查看
思路:从样例来看,应该每次找一个入度为0的点,然后更新相邻节点,注意题目说的最后一个数后面没有空格。
题目链接
题目链接
/***************************************** Author :Crazy_AC(JamesQi) Time :2015 File Name : *****************************************/ // #pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <algorithm> #include <iomanip> #include <sstream> #include <string> #include <stack> #include <queue> #include <deque> #include <vector> #include <map> #include <set> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <limits.h> using namespace std; #define MEM(a,b) memset(a,b,sizeof a) typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> ii; const int inf = 1 << 30; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; int g[510][510]; int in[510]; int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int n,m; while(~scanf("%d%d",&n,&m)){ int u,v; MEM(g, 0); MEM(in, 0); for (int i = 1;i <= m;i++){ cin >> u >> v; if (!g[u][v]){ g[u][v] = 1; in[v]++; } } int cnt = 0; while(true){ int top; bool flag = false; for (int i = 1;i <= n;i++) if (in[i] == 0){ top = i; flag = true; in[i]--; cnt++; break; } if (!flag) break; if (cnt != n) printf("%d ",top); else printf("%d\n",top); for (int i = 1;i <= n;i++){ if (g[top][i]){ in[i]--; } } } } return 0; }
相关文章推荐
- 【矩阵快速幂-求平方根表达式的值】HDU Problem of Precision 2256
- mallet环境配置
- 区间专题
- leetcode - N-Queens
- 杭电2539点球大战
- 可能导致Java内存泄漏的几项原因
- 自己掌控自己,精而少
- unresolved external symbol错误及其解决方法
- C++ 11 学习3:显示虚函数重载(override)
- C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)
- C++ 11 学习1:类型自动推导 auto和decltype
- 提交Sublime Text 插件到Package Control
- 黑马程序员——集合框架(Collection)
- 百度地图获取地址信息由纬度和经度
- mysql命令大全
- 第二节 基本概念及操作
- 求长度
- 今目标——让我们离成功更近……
- dockerfile 使用方法
- 指针寻找最大小值