sidjha57

template

Jan 25th, 2022 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.47 KB | None | 0 0
  1. //Siddharth Jha
  2.  
  3. #include<bits/stdc++.h>
  4. //#include<ext/pb_ds/assoc_container.hpp>
  5. //#include<ext/pb_ds/tree_policy.hpp>
  6. //#include <ext/pb_ds/trie_policy.hpp>
  7. //using namespace __gnu_pbds;
  8. using namespace std;
  9. //typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds;
  10. //typedef trie<string,null_type,trie_string_access_traits<>,pat_trie_tag,trie_prefix_search_node_update> pbtrie;
  11.  
  12. #define ll                       long long int
  13. #define mod                      1000000007
  14. #define inf                      1e18
  15. #define pb                       push_back
  16. #define vi                       vector<ll>
  17. #define vs                       vector<string>
  18. #define pii                      pair<ll,ll>
  19. #define ump                      unordered_map
  20. #define mp                       make_pair
  21. #define pq_max                   priority_queue<ll>
  22. #define pq_min                   priority_queue<ll,vi,greater<ll> >
  23. #define all(n)                   n.begin(),n.end()
  24. #define ff                       first
  25. #define ss                       second
  26. #define mid(l,r)                 (l+(r-l)/2)
  27. #define bitc(n)                  __builtin_popcount(n)
  28. #define SET(a)                   memset( a, -1, sizeof a )
  29. #define CLR(a)                   memset( a,  0, sizeof a )
  30. #define Pi                       3.141592653589793
  31. #define loop(x,start,end)        for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
  32. #define _fast                    ios_base::sync_with_stdio(0);  cin.tie(0); cout.tie(0);
  33. #define iter(container,it)       for(__typeof(container.begin()) it = container.begin(); it != container.end(); it++)
  34. #define log(args...)             {string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
  35. #define logarr(arr,a,b)          for(int z=(a);z<=(b);z++) cout<<(arr[z])<<" ";cout<<endl;
  36. template <typename T> T          gcd(T a, T b){if(a%b) return gcd(b,a%b);return b;}
  37. template <typename T> T          lcm(T a, T b){return (a*(b/gcd(a,b)));}
  38. vs tokenizer(string str,char ch) {std::istringstream var((str)); vs v; string t; while(getline((var), t, (ch))) {v.pb(t);} return v;}
  39.  
  40. void err(istream_iterator<string> it) {}
  41. template<typename T, typename... Args>
  42. void err(istream_iterator<string> it, T a, Args... args) {
  43. cout << *it << " = " << a << endl;
  44. err(++it, args...);
  45. }
  46. ll binpow(ll a, ll b, ll m) {
  47.     a %= m;
  48.     ll res = 1;
  49.     while (b > 0) {
  50.         if (b & 1)
  51.             res = res * a % m;
  52.         a = a * a % m;
  53.         b >>= 1;
  54.     }
  55.     return res;
  56. }
  57. // 0 based indexing
  58. struct segtree {
  59.  
  60.     vi seg;
  61.     ll size;
  62.  
  63.     void init(ll n) {
  64.         size = 1;
  65.         while (n > size) size *= 2;
  66.         seg.assign(2*size , 0ll);
  67.     }
  68.  
  69.     void set (ll i, ll v,ll x, ll lx, ll rx) {
  70.         if ((rx-lx) == 1) {
  71.             seg[x] = seg[x]+v;
  72.             return;
  73.         }
  74.  
  75.         ll m = mid(lx,rx);
  76.         if (i < m) {
  77.             set (i, v, 2 * x + 1, lx, m);
  78.         } else {
  79.             set (i, v, 2 * x + 2, m, rx);
  80.         }
  81.  
  82.         seg[x] = seg[2 * x + 1] + seg[2*x + 2];
  83.     }
  84.  
  85.     void set (ll i, ll v) {
  86.         set(i, v, 0, 0, size);
  87.     }
  88.     void build (vi& a,ll x, ll lx, ll rx) {
  89.         if ((rx-lx) == 1) {
  90.             if (lx < a.size()) {
  91.                 seg[x] = a[lx];
  92.             }
  93.             return;
  94.         }
  95.         ll m = mid(lx,rx);
  96.         build (a, 2 * x + 1, lx, m);
  97.         build (a, 2 * x + 2, m, rx);
  98.         seg[x] = seg[2* x + 1] + seg[2* x + 2];
  99.     }
  100.     void build (vi& a) {
  101.         build(a,0,0,size);
  102.     }
  103.    
  104.     // l to r-1
  105.     ll sum (ll l, ll r, ll x, ll lx, ll rx) {
  106.         if (lx >= r || l >= rx) return 0;
  107.         if (lx >= l && rx <= r) return seg[x];
  108.        
  109.         ll m = mid(lx,rx);
  110.         ll s1 = sum (l, r, 2 * x + 1, lx, m);
  111.         ll s2 = sum (l, r, 2 * x + 2, m, rx);
  112.         return s1+s2;
  113.     }
  114.  
  115.     ll sum (ll l ,ll r) {
  116.         return sum (l, r, 0, 0, size);
  117.     }
  118. };
  119.  
  120.  
  121. void dijkstra(ll s, vi& d, vi& p,vector<vi>& adj) {
  122.     d[s] = 0;
  123.     priority_queue<pii, vector<pii>, greater<pii>> q;
  124.     q.push({0,s});
  125.     while (!q.empty()) {
  126.         ll v = q.top().ff,
  127.            d_v = q.top().ss;
  128.         q.pop();
  129.  
  130.         if (d_v != d[v])
  131.             continue;
  132.  
  133.         for (auto edge : adj[v]) {
  134.             ll to = edge.ff,
  135.                len = edge.ss;
  136.  
  137.             if (d[v] + len < d[to]) {
  138.                 d[to] = d[v] + len;
  139.                 p[to] = v;
  140.                 q.push({d[to], to});
  141.             }
  142.         }
  143.     }
  144. }
  145. class DSU {
  146.     vi p,rank;
  147.     public :
  148.     DSU(ll n) {
  149.         p.resize(n+1,0),rank.resize(n+1,0);
  150.         for (int i = 0; i<= n; i++) p[i] = i;
  151.     }
  152.  
  153.     ll Get (ll a) {
  154.         return p[a] = (p[a] == a) ? a : Get(p[a]);
  155.     }
  156.  
  157.     void Union (ll a, ll b) {
  158.         a = Get(a), b = Get(b);
  159.         if (a == b) return;
  160.         if (rank[a] > rank[b])
  161.             p[b] = a, rank[a]++;
  162.         else
  163.             p[a] = b, rank[b]++;
  164.     }
  165. };
  166.  
  167. const int MOD = 1e9 +7 ;
  168. const long long MOD2 = static_cast <long long> (MOD)*MOD;
  169.  
  170. struct Matrix {
  171.   vector < vector <int> > mat;
  172.   int n_rows,n_cols;
  173.  
  174.   Matrix() {}
  175.  
  176.   Matrix (vector < vector<int> > values) : mat(values), n_rows(values.size()),
  177.           n_cols(values[0].size()) {}
  178.  
  179.   static Matrix identity_matrix (int n) {
  180.      vector < vector <int> > values(n, vector <int> (n,0));
  181.      for (int i=0; i<n; i++) values[i][i] = 1;
  182.      return values;
  183.   }
  184.   Matrix operator* (const Matrix &other) const {
  185.     int n = n_rows, m = n_cols;
  186.     vector < vector <int> > result (n_rows, vector<int> (n_cols,0));
  187.     for (int i=0; i<n; i++)
  188.       for (int j=0; j<m; j++) {
  189.         long long tmp = 0;
  190.         for (int k=0; k < n_cols; k++) {
  191.             tmp += mat[i][k] * 1ll * other.mat[k][j];
  192.             while (tmp >= MOD2) tmp -= MOD2;
  193.         }
  194.         result[i][j] = tmp % MOD;
  195.       }
  196.     return move(Matrix(move(result)));
  197.   }
  198.   inline bool is_square () const { return n_rows == n_cols;}
  199. };
  200.  
  201. Matrix pw (Matrix a, int p) {
  202.   Matrix result = Matrix::identity_matrix(a.n_cols);
  203.   while (p>0) {
  204.     if (p&1) result = a*result;
  205.     a = a*a;
  206.     p >>= 1;
  207.   }
  208.   return result;
  209. }
  210.  
  211. class krushkals {
  212.     vector<int> parent, rank;
  213.  
  214. void make_set(int v) {
  215.     parent[v] = v;
  216.     rank[v] = 0;
  217. }
  218.  
  219. int find_set(int v) {
  220.     if (v == parent[v])
  221.         return v;
  222.     return parent[v] = find_set(parent[v]);
  223. }
  224.  
  225. void union_sets(int a, int b) {
  226.     a = find_set(a);
  227.     b = find_set(b);
  228.     if (a != b) {
  229.         if (rank[a] < rank[b])
  230.             swap(a, b);
  231.         parent[b] = a;
  232.         if (rank[a] == rank[b])
  233.             rank[a]++;
  234.     }
  235. }
  236.  
  237. struct Edge {
  238.     int u, v, weight;
  239.     bool operator<(Edge const& other) {
  240.         return weight < other.weight;
  241.     }
  242. };
  243.  
  244. int n;
  245. vector<Edge> edges;
  246.  
  247. void solve () {
  248.     int cost = 0;
  249. vector<Edge> result;
  250. parent.resize(n);
  251. rank.resize(n);
  252. for (int i = 0; i < n; i++)
  253.     make_set(i);
  254.  
  255. sort(edges.begin(), edges.end());
  256.  
  257. for (Edge e : edges) {
  258.     if (find_set(e.u) != find_set(e.v)) {
  259.         cost += e.weight;
  260.         result.push_back(e);
  261.         union_sets(e.u, e.v);
  262.     }
  263. }
  264. }
  265.  
  266. };
  267.  
  268. void solve() {
  269.  
  270. }
  271.  
  272. int main(int argc, char const *argv[]){
  273.     _fast
  274.   //#ifndef ONLINE_JUDGE
  275.         //freopen("input.txt", "r", stdin);
  276.         //freopen("output.txt", "w", stdout);
  277.   //#endif
  278.     ll t; cin>>t;
  279.     while(t--){
  280.      solve();
  281.     }
  282.   return 0;
  283. }
Add Comment
Please, Sign In to add comment