随笔分类 -  最小生成树

摘要:hdu1 04 Ball(bitset) 把所有边升序排序后,枚举中间大小的边$e$ 考虑对每个点$i$记录所有$dis(i,j)\le e$的$j$构成的集合$S_i$ 在枚举到边$(u,v,w)$时,以该边为中位数的三角形答案为$S_i \cap \bar{S_j}$ 利用bitset容易维护 阅读全文
posted @ 2022-08-30 21:38 jack_yyc 阅读(33) 评论(0) 推荐(0)
摘要:2019 NWERC(最短路+凸包、线段树二分、智慧题) D. Disposable Switches 显然最终的答案只与经过的边数和经过的最短路径长度和有关 令$dis[x][k]$表示到$x$点经过$k$条边的最短路(因为记录了边数,这个东西可以直接$n^2$预处理 完全不可能的点不容易求,考虑 阅读全文
posted @ 2021-10-27 11:59 jack_yyc 阅读(94) 评论(0) 推荐(0)
摘要:A 数位$dp$ 咕了 B 由于$m$很小,考虑用生成函数表示方案数,设$f_i$表示$i$个物品的生成函数 转移$f_i$时,单独考虑第$i$个物品有三种情况$(不选,s,b)\(,对应价格为\)(0,1,2)$,贡献为$f_{i-1}(1+x+x^2)$ 否则$i$与$i-1$联合考虑,一共四种 阅读全文
posted @ 2021-08-12 21:27 jack_yyc 阅读(51) 评论(0) 推荐(0)
摘要:A 离谱平衡树题 咕 B 好像更离谱的结论题 C 设$ans_i$表示以$a$串的$i$为起始匹配位置的失配数 则$ans_i=\sum\limits_{j=0}{m-1} [b_j\neq a_{i+j}]$,将$b$串翻转,即有$ans_i=\sum\limits_{j=0}{m-1} [b_{ 阅读全文
posted @ 2021-07-30 19:26 jack_yyc 阅读(60) 评论(0) 推荐(0)
摘要:这场好难 $dls$下手也太狠了 A 好奇怪的题 弃了 B 将每个点认为是边和列之间的边,容易发现题意即为求最小生成树 因为边权不会太大,桶排序后$kruskal$即可 #include<bits/stdc++.h> #define inf 2139062143 #define ll long lo 阅读全文
posted @ 2021-07-30 19:09 jack_yyc 阅读(47) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-03-21 08:43 jack_yyc 阅读(67) 评论(0) 推荐(0)
摘要:T1 HOTEL 题目大意: 在树上选出三个点使这三个两两之间距离相等 求选出这三个点的方案 思路: 树形dp 枚举每一个树根 选三个和选两个差不多 多开一个dp数组 1 #include<iostream> 2 #include<cmath> 3 #include<algorithm> 4 #in 阅读全文
posted @ 2018-08-13 15:29 jack_yyc 阅读(184) 评论(0) 推荐(0)
摘要:T1 井 luogu 1550 题目大意: n个点 需要给每个点供水 在给第i个点供水需要花费v i 连接i号点和j号点 P_ij 求给所有点供水的最小代价 思路: 建立一个新节点 对所有点连接v i 边权的长度 然后跑kruskal 1 #include<iostream> 2 #include< 阅读全文
posted @ 2018-07-23 10:21 jack_yyc 阅读(225) 评论(0) 推荐(0)
摘要:题目大意: 决定把水灌到n块农田,农田被数字1到n标记 把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库 建造一个水库需要花费wi,连接两块土地需要花费Pij. 计算所需的最少代价 思路: 新开一个节点与每个农田连一条长为wi的边 然后直接最小生成树 1 #include<iost 阅读全文
posted @ 2017-12-22 22:36 jack_yyc 阅读(116) 评论(0) 推荐(0)
摘要:题目大意: 现在给出了一个简单无向加权图 求这个图中有多少个不同的最小生成树 如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 输出方案数对31011的模 思路: 首先我们求出这个最小生成树需要用的边,每种边权的边需要用多少个 然后因为注意到数据很小 可以直接dfs 对于每种权值的 阅读全文
posted @ 2017-11-21 14:22 jack_yyc 阅读(194) 评论(0) 推荐(0)
摘要:终于AK了,虽然第三题主要是搞月想出来的 T1: n个1*1的小方块,把这些小方块拼成一个图形,使这个图形周长最小 思路: 枚举拼成长方形的长为i,宽为n/i 可得面积 (i+n/i+(bool)(n%i))*2 1 #include<iostream> 2 #include<cstdio> 3 # 阅读全文
posted @ 2017-11-04 16:13 jack_yyc 阅读(177) 评论(0) 推荐(0)
摘要:题目大意: 一个无向带权图,每条边为黑或白(1/0) 求包含k条白边的最小生成树,保证有解 思路: 蛇皮题 高老师提醒了我们二分 就是二分+mst 我们二分一个权值,然后对于每个白边加上这个权值 这样就可以算出我们要取哪些白边 所以二分的范围要到负数 如果知道要取哪些白边和黑边,然后直接求出这个树的 阅读全文
posted @ 2017-10-23 17:19 jack_yyc 阅读(222) 评论(0) 推荐(0)
摘要:第一次160太不像话了 第二题蛇皮错误并查集f[x]=find(f[x])写错了 改完之后250 mmp T1: 环形消灭虫子 思路: 首先可以想到枚举起点然后dp消灭虫子 复杂度n2 然后我想到了一个蛇皮优化 因为取到的点是不可能连在一起的 所以我们的枚举有很多是重复的 只需要枚举相邻的任意两个点 阅读全文
posted @ 2017-10-18 20:05 jack_yyc 阅读(158) 评论(0) 推荐(0)
摘要:题目大意: 无向图上 每次询问两个点 寻找一条路径使这条路径上的最小值最大 思路: 先跑一个最大生成树 然后在最大生成树上每次对每两个点跑一个lca 在倍增的同时开一个数组a[i][j] 记录从i个点往上跑j条路里j条路中的最小值 然后每次lca的时候顺便记录一下就行了 1 #include<ios 阅读全文
posted @ 2017-09-28 21:31 jack_yyc 阅读(232) 评论(0) 推荐(0)
摘要:题目大意: 最小生成树裸题 思路: 直接kruskal #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<cstdlib> using namespac 阅读全文
posted @ 2017-07-15 19:21 jack_yyc 阅读(120) 评论(0) 推荐(0)