A.
幽默題,不說了
B.
結論題, ans=3(n-gcd(n,x))。
c.
分類討論 k 的奇偶性。若 k 為偶數,則列舉直徑上的點,向兩邊dfs在 \frac{k}{2} 步之內能到的點。若 k 為奇數,列舉直徑上的一條邊即可。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2005;
const int inf = 1e18;
int head[N], ecnt;
struct edge {
int next, to;
}e[N << 2];
void addedge(int u, int v) {
e[++ ecnt].to = v;
e[ecnt].next = head[u];
head[u] = ecnt;
}
int n, k;
int cnt;
int vis[N];
void dfs(int u, int fa, int p) {
if(vis[u]) return;
vis[u] = 1;
cnt ++;
if(p == 0) return;
for(int i = head[u]; ~i; i = e[i].next) {
int v = e[i].to;
if(v == fa) continue;
dfs(v, u, p - 1);
}
}
void solve1() {
int ans = inf;
for(int i = 1; i <= n; i ++) {
cnt = 0;
for(int j = 0; j <= n; j ++) vis[j] = 0;
dfs(i, 0, k / 2);
ans = min(ans, n - cnt);
}
cout << ans << endl;
}
struct node {
int x, y;
};
vector<node> g;
void solve2() {
int ans = inf;
for(int i = 0; i < g.size(); i ++) {
int x = g[i].x, y = g[i].y;