Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 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.   us[u]=1,level[u]=l;
  47.   for(int v: graph[u]) if(!us[u]) dfs(v,l+1);
  48. }
  49. void dfs2(int u, int l){
  50.   us[u]=1,level2[u]=l;
  51.   for(int v: graph[u]) if(!us[u]) dfs2(v,l+1);
  52. }
  53. ii extremos(){
  54.   int b=-1,e=-1;
  55.   memset(us,0,sizeof(us));
  56.   dfs(1,1);
  57.   int idx=0,romario=0;
  58.   for(int i=1;i<=n;i++) if(level[i]<romario) romario=level[i],idx=i;
  59.   memset(us,0,sizeof(us));
  60.   b=idx;
  61.   dfs(b,1);
  62.   idx=0,romario=0;
  63.   memset(level,0,sizeof(level));
  64.   for(int i=1;i<=n;i++) if(level[i]<romario) romario=level[i],idx=i;
  65.   e=idx;
  66.   return mp(b,e);
  67. }
  68. int main()
  69. {
  70.   sc(t);
  71.   for(int Y=0;Y<t;Y++){
  72.     for(int i=0;i<N;i++) graph[i].clear();
  73.     sc2(c,k);
  74.     sc(n);
  75.     for(int i=2;i<=n;i++){
  76.       int x;
  77.       sc(x);
  78.       graph[x].pb(i);
  79.       graph[i].pb(x);
  80.     }
  81.     ii ext=extremos();
  82.     memset(us,0,sizeof(us));
  83.     dfs(ext.first,0);
  84.     memset(us,0,sizeof(us));
  85.     dfs2(ext.second,0);
  86.     for(int i=1;i<=n;i++) level[i]=max(level[i],level2[i]);
  87.     int menorigual=0;
  88.     for(int i=1;i<=n;i++) menorigual+=(level[i]<=k);
  89.     double prob=menorigual/(double)n;
  90.   }
  91.   return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement