CF 436D 最小生成树】的更多相关文章

设一个开头的虚节点,然后建稠密图,O(n^2).使用prim.O(n^2),保存方案,没什么好说的. #include <string.h> #include <stdio.h> #include <algorithm> #include <vector> using namespace std; int k,w,n,m; int cnt; int map[1005][1005]; char data[1002][11][11]; int father[10…
题目链接:http://codeforces.com/problemset/problem/609/E 大致就是有一棵树,对于每一条边,询问包含这条边,最小的一个生成树的权值. 做法就是先求一次最小生成树,标记最小生成树上的边,对于这些边,直接就是原始最小生成树.否则必然可以在去掉u到v路径上最长边,再加上边u->v,这一定是包含此边最小的生成树. 查询最长边,可以用树链剖分,也可以树上倍增. #include <iostream> #include <vector> #in…
http://codeforces.com/problemset/problem/160/D 这道题要求哪条边存在于某个最小生成树中,哪条边不存在于最小生成树中,哪条边绝对存在于最小生成树中 明显桥边一定存在于所有最小生成树中,然而怎么处理存在某个最小生成树的边呢? 借助kruskal算法的性质,由小到大,每次处理同一权值的边,如果边连接的点已经联通就不要管,否则那些处理的边一定存在于某最小生成树上 批量处理的思想很巧妙 #include <cstdio> #include <vecto…
题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为什么会出现多个最小生成树的情况? 因为有些边的权值是相同的 , 所以在构造最小生成树的时候 ,我们是可以选择不同的边 , 构造出不同的最小生成树: 如果我们要是生成的最小生成树是唯一的 , 那我们每一次的加边十都只能是一种选择 也就是说,在构造过程的某一次抉择中,如果有多条边,他们的权值均最小,且合…
1408E Avoid Rainbow Cycles 概述 非常有趣的题目(指解法,不难,但很难想) 非常崇拜300iq,今天想做一套div1时看见了他出的这套题Grakn Forces 2020,就立马开始补这套题,果然不出我所料,全是iq题(误 题目 m个set中有1-n的一些数,首先我们可以把一个数 j 从set i 中删除,代价是 \(a[i]+b[j]\) ,至于为什么要删除之后再说 接着我们对于每个set i,\(\forall x,y \in i\),建边\((x,y)\)并染色为…
题意: N个点.N行N列d[i][j]. d[i][j]:结点i到结点j的距离. 问这N个点是否可能是一棵树.是输出YES,否则输出NO. 思路: 假设这个完全图是由一棵树得来的,则我们对这个完全图求最小生成树,得到原树.(画个图就明白) 故我们对完全图求最小生成树,然后用DFS从这棵树上的每个点出发,判断距离是否和矩阵d相同. 注意: 用vector存与每个点相连树枝的另一端,否则超时.用了vector也耗了1400多秒,限时2s. 代码: #include <cstdio> #includ…
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6137    Accepted Submission(s): 2143 Problem Description During the Warring States Period of ancient China(47…
Description Farmer John最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农场).有些农场之间原本就有道路相连. 所有N(1 <= N <= 1,000)个农场(用1..N顺次编号)在地图上都表示为坐标为(X_i, Y_i)的点(0 <= X_i <= 1,000,000:0 <= Y_i <= 1,000,000),两个农场间道路的长度自然就是代…
传送门 将"进入路段时速度\(\leq s_i\)"转换为:"进入路段时速度恰好等于\(s_i\),并且铺设铁轨有加速和减速两种,加速无需代价,减速每\(1 km/h\)花费\(1\)的代价". 将所有路段\((s_i,t_i)\)变为图上的一条边\((s_i , t_i)\),然后加上一条\((INF , 1)\)边,我们要求的就是一条代价最小的经过所有这些边的欧拉回路. 先对于所有速度离散化,然后考虑一段区间\([v_i , v_{i+1})\),在欧拉回路中从…
什么是最小生成树(Minimum Spanning Tree) 每两个端点之间的边都有一个权重值,最小生成树是这些边的一个子集.这些边可以将所有端点连到一起,且总的权重最小 下图所示的例子,最小生成树是{cf, fa, ab} 3条边 Kruskal算法 用到上一篇中介绍的不相交集合(并查集) 首先,定义V是端点的集合,E是边的集合,A为要求的最小生成树集合 初始A为空集合,每个端点都作为单独的不相交集合 将所有边根据其权重进行排序 对每条边(v1, v2),如果其两个端点数据不同的不相交集,则…