大家肯定都做过洛谷吧!
有一次一个朋友给我发了一道题,我看了后笑了。
这么简单的题,我简简单单的回了一句:cout<<"Hello,World!";
过了一会朋友说不是这道题,随后把链接发给了我,我打开看了后才发现
“一切并非这么简单”
那道题竟是这样的:你们可以看看,链接:Hello world! - 洛谷
呃呃呃呃呃呃呃呃~~~~~
朋友发到:你帮帮我吧!
我:你不做不行吗???
朋友:嘿,你不会了是吧,你个zz;
我:已急;
我一会胳膊,开干!
此题的代码: 拒绝复制!!!!!!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 50005, M = (N << 1), K = 255;
ll rd() {
char c = getchar(); ll x = 0ll, f = 1ll;
for (; !isdigit(c); c = getchar()) if (c == '-') f = -1;
for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
return x * f;
}
int n, m, q, ecnt = 0, fir[N], to[M], nxt[M], fa[N][16], nx[N][K], depth[N], f[N];
ll a[N];
#define fa(x) fa[x][0]
void ae(int u, int v) {to[++ecnt] = v; nxt[ecnt] = fir[u]; fir[u] = ecnt;}
void dfs(int u, int f) {
int i; nx[u][0] = u, fa[u][0] = nx[u][1] = f, depth[u] = depth[f] + 1;
for (i = 1; i <= 15; ++i) fa[u][i] = fa[fa[u][i - 1]][i - 1];
for (i = 2; i <= m; ++i) nx[u][i] = nx[f][i - 1];
for (i = fir[u]; i; i = nxt[i]) {
int v = to[i];
if (v != f) dfs(v, u);
}
}
int up(int x, int k) {
int i; if (k <= m) return nx[x][k];
for (i = 15; ~i; --i) if (k >= (1 << i)) x = fa[x][i], k -= 1 << i;
return x;
}
int lca(int u, int v) {
int i; if (depth[u] < depth[v]) swap(u, v);
for (i = 15; ~i; --i) if (depth[fa[u][i]