HDU 1285
题目 ::点击打开链接
注意:拓扑排序,比较典型。
#include<stdio.h> #include<string.h> # define MAXN 501 int map[MAXN][MAXN]; int in_degree[MAXN]; int ans[MAXN], k, i, j; void topo(int n) { for(i=1; i<=n; i++) for(j=1; j<=n; j++){ if(map[i][j]) in_degree[j]++; } for(i=1; i<=n; i++) { k = 1; while(in_degree[k]!=0) k++; ans[i] = k; in_degree[k] = -1; for(j=1; j<=n; j++) if(map[k][j]!=0) in_degree[j]--; } } int main() { int n, m, i, x, y; while(scanf("%d %d", &n, &m)!=EOF) { memset(map, 0, sizeof(map)); memset(in_degree, 0, sizeof(in_degree)); memset(ans, 0, sizeof(ans)); for(i=1; i<=m; i++) { scanf("%d %d", &x, &y); map[x][y] = 1; } topo(n); for(i=1; i<n; i++) { printf("%d ", ans[i]); } printf("%d\n", ans[n]); } return 0; }
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。