Advertisement
Nur_Mohammed_Mehedy

Page Hopping UVA - 821

Jun 26th, 2021
988
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1. //#pragma GCC optimize("Ofast")
  2. //#pragma GCC target("avx,avx2,fma")
  3. //#pragma GCC optimization ("unroll-loops")
  4.  
  5. #include<bits/stdc++.h>
  6. #include<string.h>
  7. using namespace std;
  8. #define pb          push_back
  9. #define all(v)      v.begin(),v.end()
  10. #define yes         cout<<"YES"<<endl;
  11. #define no          cout<<"NO"<<endl;
  12. #define ff          first
  13. #define sc          second
  14. #define inf         999999999
  15. #define pi          3.14159265359
  16. #define printv(v)   for(auto x:v)cout<<x<<' ';cout<<endl;
  17. #define takev(v)    for(auto &x:v)cin>>x;
  18. inline  int         random(int a=1,int b=10)
  19. {
  20.     return a+rand()%(b-a+1);
  21. }
  22. typedef long long ll;
  23. inline ll           lcm(ll a,ll b)
  24. {
  25.     return (a*b)/__gcd(a,b);
  26. }
  27. //#define see(x)  cout<<endl<<#x<<" : "<<(x)<<endl;
  28. #define see(args...) \
  29. { \
  30.     string _s = #args; replace(_s.begin(), _s.end(), ',', ' ');\
  31.     stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args);\
  32. }
  33. void err(istream_iterator<string> it) {}
  34. template<typename T, typename... Args>
  35. void err(istream_iterator<string> it, T a, Args... args)
  36. {
  37.     cout<< *it << " = " << a <<",\n"[++it==istream_iterator<string>()];
  38.     err(it, args...);
  39. }
  40. #define scc(n) scanf("%d",&n);
  41. #define sccc(n) scanf("%lld",&n);
  42.  
  43. typedef pair<ll,ll> pll;
  44. typedef pair<int,int> pii;
  45. const int N=1e5+9,mod=1e9+7;
  46.  
  47.  
  48. int main()
  49. {
  50. //    ios::sync_with_stdio(0);
  51. //    cin.tie(NULL);
  52.  
  53.  
  54.     int _ = 0;
  55.     while(true)
  56.     {
  57.  
  58.         int x,y;
  59.         scc(x)
  60.         scc(y)
  61.         if(!x)break;
  62.  
  63.         set<int>s;
  64.         vector< pii > v;
  65.         vector< int >change(102);
  66.         v.pb({x,y});
  67.  
  68.         s.insert(x);
  69.         s.insert(y);
  70.         change[x] = x;
  71.         change[y] = y;
  72.  
  73.         while(true)
  74.         {
  75.             scc(x)
  76.             scc(y)
  77.             if(!x)break;
  78.             v.pb({x,y});
  79.             s.insert(x);
  80.             s.insert(y);
  81.             change[x] = x;
  82.             change[y] = y;
  83.         }
  84.  
  85.         int nodes = s.size();
  86.  
  87.         int cur = 1;
  88.         for(auto x:s)
  89.         {
  90.             if(cur == x)
  91.             {
  92.                 cur++;
  93.                 continue;
  94.             }
  95.             change[x] = cur;
  96.             cur++;
  97.         }
  98.  
  99.         vector< vector<int> > G(101,vector<int>(101,inf));
  100.  
  101.         for(int i=1;i<=nodes;i++)G[i][i] = 0;
  102.  
  103.         for(auto [l,r] : v)
  104.         {
  105.             G[change[l]][change[r]] = 1;
  106.         }
  107.  
  108.         for(int k=1;k<=nodes;k++)
  109.         {
  110.             for(int i=1;i<=nodes;i++)
  111.             {
  112.                 for(int j=1;j<=nodes;j++)
  113.                 {
  114.                     if(G[i][j] > G[i][k] + G[k][j]) G[i][j] = G[i][k] + G[k][j];
  115.                 }
  116.             }
  117.         }
  118.  
  119.         double total = 0;
  120.         double total_pairs = nodes*(nodes-1);
  121.         for(int i=1;i<=nodes;i++)
  122.         {
  123.             for(int j=1;j<=nodes;j++)
  124.             {
  125.                 total += G[i][j];
  126.             }
  127.         }
  128.         printf("Case %d: average length between pages = %.3lf clicks\n",++_,total/total_pairs);
  129.  
  130.     }
  131.  
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement