Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cmath>
  4. #include <cstdio>
  5. #include <cstdlib>
  6. #include <cstring>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <map>
  10. #include <queue>
  11. #include <set>
  12. #include <stack>
  13. #include <string>
  14. #include <utility>
  15. #include <vector>
  16. using namespace std;
  17. #define sc(a) scanf("%d", &a)
  18. #define sc2(a, b) scanf("%d%d", &a, &b)
  19. #define sc3(a, b, c) scanf("%d%d%d", &a, &b, &c)
  20. #define pri(x) printf("%d\n", x)
  21. #define prie(x) printf("%d ", x)
  22. #define mp make_pair
  23. #define pb push_back
  24. #define BUFF ios::sync_with_stdio(false);
  25. #define db(x) cerr << #x << " == " << x << endl
  26. #define dbs(x) cerr << x << endl
  27. #define imprime(x, Y)                              \
  28.   for (int X = 0; X < Y; X++) cerr << x[X] << " "; \
  29.   cerr << endl;
  30. typedef long long int ll;
  31. typedef long double ld;
  32. typedef pair<int, int> ii;
  33. typedef vector<int> vi;
  34. typedef vector<ii> vii;
  35. typedef vector<vi> vvi;
  36. typedef vector<vector<ii> > vvii;
  37. const int INF = 0x3f3f3f3f;
  38. const ll LINF = 0x3f3f3f3f3f3f3f3fll;
  39. const ld pi = acos(-1);
  40. const int MOD = 1e9 + 7;
  41. const int N = 100010;
  42. int t, c, k, n;
  43. vi graph[N];
  44. int us[N], level[N], level2[N];
  45. void dfs(int u, int l)
  46. {
  47.   us[u] = 1, level[u] = l;
  48.   for (int v : graph[u])
  49.     if (!us[u]) dfs(v, l + 1);
  50. }
  51. void dfs2(int u, int l)
  52. {
  53.   us[u] = 1, level2[u] = l;
  54.   for (int v : graph[u])
  55.     if (!us[u]) dfs2(v, l + 1);
  56. }
  57. ii extremos()
  58. {
  59.   int b = -1, e = -1;
  60.   memset(us, 0, sizeof(us));
  61.   dfs(1, 1);
  62.   int idx = 0, romario = 0;
  63.   for (int i = 1; i <= n; i++)
  64.     if (level[i] < romario) romario = level[i], idx = i;
  65.   memset(us, 0, sizeof(us));
  66.   b = idx;
  67.   dfs(b, 1);
  68.   idx = 0, romario = 0;
  69.   memset(level, 0, sizeof(level));
  70.   for (int i = 1; i <= n; i++)
  71.     if (level[i] < romario) romario = level[i], idx = i;
  72.   e = idx;
  73.   return mp(b, e);
  74. }
  75. int main()
  76. {
  77.   sc(t);
  78.   for (int Y = 0; Y < t; Y++) {
  79.     for (int i = 0; i < N; i++) graph[i].clear();
  80.     sc2(c, k);
  81.     for (int j = 0; j < c; j++) {
  82.       sc(n);
  83.       for (int i = 2; i <= n; i++) {
  84.         int x;
  85.         sc(x);
  86.         graph[x].pb(i);
  87.         graph[i].pb(x);
  88.       }
  89.       ii ext = extremos();
  90.       memset(us, 0, sizeof(us));
  91.       dfs(ext.first, 0);
  92.       memset(us, 0, sizeof(us));
  93.       dfs2(ext.second, 0);
  94.       for (int i = 1; i <= n; i++) level[i] = max(level[i], level2[i]);
  95.       int menorigual = 0;
  96.       for (int i = 1; i <= n; i++) menorigual += (level[i] <= k);
  97.       double prob = menorigual / (double)n;
  98.     }
  99.   }
  100.   return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement