题目:给你一下任务以及这些任务的依赖关系,求有最长依赖关系链的任务。
分析:搜索。可以利用dfs或者记忆化搜索。
(因为没有环是树状结构,所以每个根计算时的解就是最终结果,不会被更新)。
说明:每次要清空标记的数组。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int maps[101][101]; int used[101]; int dfs(int s, int n) { if (used[s]) return used[s]; int Max = 0; for (int i = 1 ; i <= n ; ++ i) if (maps[s][i]) Max = max(Max, dfs(i, n)+1); return used[s] = Max; } int main() { int n,m,p; while (~scanf("%d",&n) && n) { memset(maps, 0, sizeof(maps)); memset(used, 0, sizeof(used)); for (int i = 1 ; i <= n ; ++ i) { scanf("%d",&m); for (int j = 1 ; j <= m ; ++ j) { scanf("%d",&p); maps[i][p] = 1; } maps[0][i] = 1; } dfs(0, n); int space = 1; for (int i = 2 ; i <= n ; ++ i) if (used[space] < used[i]) space = i; printf("%d\n",space); } return 0; }
时间: 2024-10-09 07:22:31