
最小生成树
wanherun
今天会有好事发生吗
展开
-
[noip2013]货车运输 题解
一句话题意就是求A到B的路径中的最小值最大,是不是有一种一眼二分的奇妙感觉,但是,我们显然二分不了呀。仔细想一想,最大,答案一定是出现在最大生成数上的。好了,我们就可以先求一遍最大生成“树”,打引号是因为它们不一定都是联通的,事实上是,最大生成森林。然后对于每一个询问,我们可以倍增地求出最小值。这样的话,就解决这道题了。#include<bits/stdc++.h>#define N 100000原创 2017-10-25 23:22:23 · 341 阅读 · 1 评论 -
bzoj1601 [Usaco2008 Oct]灌水
题目构造一个虚拟点0,连向每一个点,边权为建造水站的费用,之后各个之间连边,跑最小生成树就OK了。#include<bits/stdc++.h>#define N 500using namespace std;int n,f[N+1],x,tot,ans,fx,fy;struct edge{ int x; int y; int val; bool operat原创 2017-09-23 23:54:56 · 189 阅读 · 0 评论 -
bzoj3732 Network
题目貌似又是一道模板题,kruskal重构树233,合并时按秩合并,深度最多logn,这样以后,连倍增都可以不要,直接走就好了。#include<bits/stdc++.h>#define N 15000#define Max(x,y,z) max(max(x,y),z)using namespace std;int n,m,k,num,x,y;int f[N+1],siz[N+1];i原创 2017-09-09 16:19:11 · 211 阅读 · 0 评论 -
bzoj2654 tree
题目也是比较神奇的一道题,我们先把白边都加一个权值,这样的话,每次最小生成树中白边都会减少,而且,这样肯定满足二分性质的。不过,有一点需要注意的1是,排序是,如果权值相同,白边要排在前面。#include<bits/stdc++.h>#define N 100000using namespace std;struct line{ int x; int y; int va原创 2017-09-06 21:53:33 · 296 阅读 · 0 评论 -
bzoj1050 [HAOI2006]旅行comf
题目枚举最小边,在用kruskal方法来让S与T,联通,这样比值就最优了。。#include<bits/stdc++.h>using namespace std;int f[501];int n,m,s,t;int A1,A2;double Ans;bool have_Ans;struct edge{ int x; int y; int value; v原创 2017-08-31 07:39:05 · 258 阅读 · 0 评论 -
bzoj3714 [PA2014]Kuglarz
题目一道神题,一开始还想了很多,什么博弈论之类的,233,还是太年轻啊。看了看别人的题解后,茅塞顿开,可以说是很可以的。我们要知道每个杯子下的情况,就要知道每一个(废话),所以就是最小代价知道所有,一个区间[i,j],知道[1,i-1],[1,j],就知道了,而且三个是知二推一,所以我们把0~n连起来就好了(感性的认识一下),想到了什么?对,最小生成树!连i-1到j,再跑一遍就是答案了。#inclu原创 2017-08-28 20:55:55 · 416 阅读 · 0 评论