Advertisement
yungyao

neoj 252

Jun 16th, 2021
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.69 KB | None | 0 0
  1. /*
  2.  
  3. weak        weak  we      ak   we  akwea        weak  we
  4.   weak    weak    we      ak   weak    weak    we  ak we
  5.     weakweak      we      ak   wea       ak   we    akwe
  6.       wea         we      ak   we        ak   we    akwe
  7.       wea         we      ak   we        ak   we    akwe
  8.       wea          eak  weak   we        ak    we  ak we
  9.       wea            wea  ak   we        ak     weak  we
  10.                                                       we
  11. we      ak     wea  ak       weak                     we
  12.  we    ak    wea  weak     wea  eak                   we
  13.   we  ak    we      ak   wea      wea         we      we
  14.    weak     we      ak   we        we         we      we
  15.     we      we      ak   we        we         we      we
  16.    we        wea  weak    wea    wea          weak  weak
  17. weak           wea  akw      weak                weak
  18.  
  19.  
  20. */
  21. using namespace std;
  22. #include <vector>
  23. #include <queue>
  24. #include <algorithm>
  25. #include <cmath>
  26. #include <utility>
  27. #include <bitset>
  28. #include <set>
  29. #include <string>
  30. #include <stack>
  31. #include <iomanip>
  32. #include <map>
  33. #include <memory.h>
  34. #include <deque>
  35.  
  36. #define pb push_back
  37. #define pii pair<int,int>
  38. #define F first
  39. #define S second
  40. #define LL long long
  41. #define mid (LB+RB)/2
  42. #define vvl vector <vector<LL>>
  43. #define vl vector <LL>
  44. #define mkp make_pair
  45.  
  46. //iterators
  47. #define iter(x) x.begin(),x.end()
  48. #define aiter(a,n) a,a+n
  49.  
  50. //loops
  51. #define REP(n) for (int ___=n;___--;)
  52. #define REP0(i,n) for (int i=0;i<n;++i)
  53. #define REP1(i,n) for (int i=1;i<=n;++i)
  54. #define FOR(i,b,l,k) for (int i=b;i!=l;i+=k)
  55. #define forEach(i,v) for (auto i:v)
  56.  
  57. /*
  58. yungyao so weeeeeeeeeeeeeeeeeeeeeeeeeeak
  59. 8e7 so dian
  60. FHVirus so dian
  61. youou so dian
  62. KYW so dian
  63. hubert so dian
  64. jass so dian
  65. tingyu so dian
  66. panda so dian
  67. */
  68.  
  69. //IO
  70. #include <iostream>
  71. #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
  72. //testing some stuff, still under construction
  73. //a lot more useful while debug
  74. inline void print(vector <int> v){
  75.     for (auto i:v)
  76.         cout << i << ' ';
  77.     cout << '\n';
  78. }
  79. inline void print(vector <int> v,char sep,char end){
  80.     for (auto i:v)
  81.         cout << i << sep;
  82.     cout << end;
  83. }
  84.  
  85. //constants
  86. const LL maxn = 100100,mod = 0;
  87.  
  88. //workspace
  89.  
  90. bool mat[530][maxn];
  91. inline void solve(){
  92.     int n,m;
  93.     vector <int> graph[maxn];
  94.     int h_to_mat[maxn];
  95.  
  96.     cin >> n >> m;
  97.     const int split = sqrt(m);
  98.     vector <pii> edge(m);
  99.     while (m--){
  100.         int u,v;
  101.  
  102.         cin >> u >> v;
  103.         edge[m] = mkp(u,v);
  104.         graph[u].pb(v); graph[v].pb(u);
  105.     }
  106.     int heavy_cnt = 0;
  107.     REP0(i,n){
  108.         if (graph[i].size() > split){
  109.             for (auto j:graph[i])
  110.                 mat[heavy_cnt][j] = true;
  111.             h_to_mat[i] = heavy_cnt++;
  112.         }
  113.         else
  114.             sort (iter(graph[i]));
  115.     }
  116.  
  117.     int cnt = 0;
  118.     for (auto [u,v]:edge){
  119.         if (graph[u].size() < graph[v].size())
  120.             swap(u,v);
  121.  
  122.         if (graph[u].size() > split){
  123.             int i = h_to_mat[u];
  124.             for (auto j:graph[v])
  125.                 cnt += mat[i][j];
  126.         }
  127.         else{
  128.             for (int i=0,j=0;j<graph[v].size();++j){
  129.                 while (graph[u][i] < graph[v][j] && i + 1 < graph[u].size())
  130.                     ++i;
  131.                 cnt += u != graph[u][i] && graph[u][i] == graph[v][j];
  132.             }
  133.         }
  134.     }
  135.     cout << cnt / 3 << '\n';
  136. }
  137.  
  138. int main(){
  139.     theyRSOOOOOOOOODIAN
  140.     //for (int ;cin;)//use in multi-testcases and end in EOF problems
  141.     //int t,i=1;for (cin >> t;i<=t;++i)//use in multi-testcases problems
  142.     //cout << "Case #" << i << ": ",//use in Google, FB competitions
  143.     solve();//always used
  144.     return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement