主页

2024BUPT网络赛题解(A~D)

Problem A. 板烧鸡腿堡 题意简述 给定一个2024/9/8到2025/9/7之间的日期,判断是否是周一。 思路 维护月份前缀和 $days_i$,则 $m$ 月 $d$ 日在一年中的总天数为 $days_{m-1}+d$,求与某个周一的天数差值是否能被 $7$ 整除即可。 代码 #include <bits/stdc++.h> using namespace std; int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int days[20] = {0}; int main() { for (int i = 1; i <= 12; i++) { ...

阅读更多

Luogu P4568题解

原题链接: 洛谷P4568 题目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 $n$ 个城市设有业务,设这些城市分别标记为 $0$ 到 $n-1$,一共有 $m$ 种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多 $k$ 种航线上搭乘飞机。那么 Alice 和 Bob 这次出行最少花费多少? 输入格式 第一行三个整数 $n,m,k$,分别表示城市数,航线数和免费乘坐次数。 接下来一行两个整数 $s,t$,分别表示他们出行的起点城市编号和终点城市编号。 接下来 $m$ 行,每行三个整...

阅读更多

树的直径

定义: 树上最远的两点之间的距离(可以有多条) 求法一:树形dp 枚举所有的节点,求以该节点为起点的最长距离和次长距离之和,最大值即为树的直径。代码如下: long long diameter, dp[MAXN]; void getDiameter1(int x, int fa) { for (int i = head[x]; i; i = e[i].next) { int y = e[i].to; if (y == fa) continue; getDiameter1(y, x); diameter = max(diameter, dp[x] + dp[y] + e[i].dis); ...

阅读更多