最小生成树 模板如下 kruskal算法 #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=2e5+10;typedef long long ll;ll ans=0;int f[maxn],n,m;struct node{int x,y,z;}s[m
传送⻔ 分析 因为区间会被后面的区间覆盖,所以考虑从后往前处理 我们用 f [ i ] f[i] f[i]表示 i i i节点前第一个没有被染色的节点,然后用并查集进行维护即可 代码 #include <bits/stdc++.h>#define debug(x) cout<<#x<<":"<<x<<endl;#define dl(x) printf("%lld\n",x);#def
一个非常强的题。 也许比较套路但是都比较生疏。 主要使用两个思想。 首先是把求第k大的权转化成枚举i 从1 - W 计算 最终的第k大 大于等于 i 的和。 然后就可以 转化成一个DP。 f[i][j][k] represents the subtree of the node i and we are considering the value of the kth node is not le
题目链接:传送门 洛咕传送门 令 s u m w sumw sumw表示 w w w的前缀和。 显然的 d p dp dp方程: d p [ i ] = m i n ( d p [ j ] + ( h [ i ] − h [ j ] ) 2 + s u m w [ i − 1 ] − s u m w [ j ] ) dp[i]=min(dp[j]+(h[i]-h[j])^2+sumw[i-1]-
Part # -1. 前言 \text{Part \# -1. 前言} Part # -1. 前言 重要的事情说三遍 先初始化,后输入! 先初始化,后输入! 先初始化,后输入! 蒟蒻就是这样 错的( Part # 0.题目 \text{Part \# 0.} 题目 Part # 0.题目 给出一个长为 n n n 的数列,以及 n n n 个操作,操作涉及区间加法,询问区间内小于某
Part #0 . 前言 \text{Part \#0 . 前言} Part #0 . 前言 分块是一种优雅的暴力。 Part #1 . 数列分块入门1 \text{Part \#1 . 数列分块入门1} Part #1 . 数列分块入门1 传送门 这题是一个基础的分块,块外的暴力,块内做标记,块长 n \sqrt{n} n ,块数 n \sqrt{n} n ,注意
正题 题目链接:https://loj.ac/p/3320 题目大意 有一张 n n n个点的无向完全图,每一条边是红色或者蓝色,对于每个点 s s s求从这个点出发的一条尽量短的经过所有点的路径。 1 ≤ n ≤ 2000 1\leq n\leq 2000 1≤n≤2000 解题思路 显然地猜测一下最短的长度肯定是 n n n,说是找一条路径,实际上我们是能够找到一个颜色交