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);
...
共计 19 篇文章,3 页。