模板

模板

#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define eb emplace_back
typedef long long ll;
using namespace std;

int main() {
#ifdef DEBUG
	freopen("1.in", "r", stdin);
#endif
	ios::sync_with_stdio(0);
	cin.tie(0);

	return 0;
}

快读

const int Bsiz = 1 << 20;
char BB[Bsiz], *SB = BB, *TB = BB;
char gc() {
	if(SB != TB) {
		return *SB++;
	}
	SB = BB;
	TB = SB + fread(BB, 1, Bsiz, stdin);
	if(SB == TB) {
		return EOF;
	}
	return *SB++;
}
template <typename T> void read(T &x) {
	T f = 1;
	char ch = gc();
	x = 0;
	while(!isdigit(ch)) {
		if(ch == '-') {
			f = -1;
		}
		ch = gc();
	}
	while(isdigit(ch)) {
		x = x * 10 + (ch & 15);
		ch = gc();
	}
	x *= f;
}

数据生成器

#include <bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
using namespace std;
namespace DM {
    mt19937_64 rnd(time(NULL));
    ll number(ll l, ll r) {
        uniform_int_distribution<ll> dis(l, r);
        return dis(rnd);
    }
    pair<ll, ll> range(ll l, ll r) {
        uniform_int_distribution<ll> dis(l, r);
        ll p = dis(rnd), q = dis(rnd);
        if(p > q) {
            swap(p, q);
        }
        return mp(p, q);
    }
    vector<int> permutation(int n) {
        vector<int> res(n);
        for(int i = 0; i < n; i++) {
            res[i] = i + 1;
        }
        shuffle(res.begin(), res.end(), rnd);
        return res;
    }
    /*
    array
    value range : [l, r]
    */
    vector<ll> array(int n, ll l, ll r) {
        vector<ll> res(n);
        for(int i = 0; i < n; i++) {
            res[i] = number(l, r);
        }
        return res;
    }
    /*
    tree
    root : random
    */
    vector<pair<int, int> > tree(int n) {
        vector<pair<int, int> > res;
        for(int i = 2; i <= n; i++) {
            res.pb(mp(number(1, i - 1), i));
        }
        vector<int> p = permutation(n);
        for(int i = 0; i < n - 1; i++) {
            res[i].fi = p[res[i].fi - 1];
            res[i].se = p[res[i].se - 1];
        }
        return res;
    }
    /*
    Binary Tree
    root : 1
    */
    vector<int> binary_tree(int n) {
        vector<int> fa, deg;
        fa.resize(n), deg.resize(n);
        for(int i = 2; i <= n; i++) {
            while(1) {
                int u = number(1, i - 1);
                if(deg[u] < 2) {
                    deg[u]++;
                    fa[i - 1] = u;
                    break;
                }
            }
        }
        return fa;
    }
    /*
    DAG / Undirected Graph
    */
    vector<pair<int, int> > graph(int n, int m) {
        vector<pair<int, int> > res;
        map<pair<int, int>, bool> vis;
        for(int i = 2; i <= n; i++) {
            while(1) {
                pair<int, int> e = mp(number(1, i - 1), i);
                if(vis[e]) {
                    continue;
                }
                res.pb(e), vis[e] = 1;
                break;
            }
        }
        for(int i = 1; i <= m - n + 1; i++) {
            while(1) {
                pair<int, int> e = range(1, n);
                if(vis[e] || e.fi == e.se) {
                    continue;
                }
                res.pb(e), vis[e] = 1;
                break;
            }
        }
        vector<int> p = permutation(n);
        for(int i = 0; i < m; i++) {
            res[i].fi = p[res[i].fi - 1];
            res[i].se = p[res[i].se - 1];
        }
        return res;
    }
}
namespace output {
    void number1(ll l, ll r) {
        ll x = DM::number(l, r);
        cout << x << ' ';
    }
    void number2(ll l, ll r) {
        ll x = DM::number(l, r);
        cout << x << '\n';
    }
    void range(ll l, ll r) {
        pair<ll, ll> x = DM::range(l, r);
        cout << x.fi << ' ' << x.se << '\n';
    }
    void tree(int n) {
        vector<pair<int, int> > x = DM::tree(n);
        for(int i = 0; i < n - 1; i++) {
            cout << x[i].fi << ' ' << x[i].se << '\n';
        }
    }
    void graph(int n, int m) {
        vector<pair<int, int> > x = DM::graph(n, m);
        for(int i = 0; i < m; i++) {
            cout << x[i].fi << ' ' << x[i].se << '\n';
        }
    }
}

int main() {
	freopen("1.in", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	return 0;
}
posted @ 2022-12-24 09:39  top_tree  阅读(78)  评论(0)    收藏  举报