【CF1023F】Mobile Phone Network(dsu,MST)
题意:
保证原边以边权单调非减的顺序读入
思路:先把未知边加入,再加入原始边做MST,考虑从大到小,用数据结构维护,每一条原始边相当两个链赋值操作,每一条未知边相当于一个询问,答案即为询问之和
LCT和树剖都能维护
但因为没有强制在线,可以使用并查集维护
考虑做完MST后预处理出深度,父亲,父边权值三个信息
枚举没有用过的原始边,用类似树剖的方法用并查集每次将一个操作中所有的点缩成一个,暴力更改边权
若有未赋值过的边则无解
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 1100000
#define M 51
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1)
#define oo 1e9 struct arr
{
int x,y,z;
}a[N]; struct node
{
int x,y;
node(int a,int b)
{
x=a;
y=b;
}
}; int f[N],g[N],fa[N],dep[N],b[N];
vector<node>c[N]; int find(int k)
{
if(fa[k]!=k) fa[k]=find(fa[k]);
return fa[k];
} void dfs(int u)
{
dep[u]=dep[f[u]]+;
for(int i=;i<=(int)c[u].size()-;i++)
{
int v=c[u][i].x;
if(v!=f[u])
{
f[v]=u;
g[v]=c[u][i].y;
dfs(v);
}
}
} int main()
{
int n,k,m;
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
c[x].push_back(node(y,));
c[y].push_back(node(x,));
fa[find(x)]=find(y);
}
for(int i=;i<=m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
for(int i=;i<=m;i++)
{
int t1=find(a[i].x);
int t2=find(a[i].y);
if(t1!=t2)
{
fa[t1]=t2;
c[a[i].x].push_back(node(a[i].y,a[i].z));
c[a[i].y].push_back(node(a[i].x,a[i].z));
b[i]=;
}
}
f[]=;
dfs();
for(int i=;i<=n;i++) fa[i]=i;
ll ans=;
for(int i=;i<=m;i++)
if(!b[i])
{
int x=find(a[i].x),y=find(a[i].y);
while(x!=y)
{
if(dep[x]<dep[y]) swap(x,y);
if(!g[x])
{
ans+=a[i].z;
g[x]=a[i].z;
}
fa[x]=find(f[x]);
x=find(x);
}
}
for(int i=;i<=n;i++)
if(!g[i])
{
printf("-1\n");
return ;
}
printf("%lld\n",ans);
return ;
}
【CF1023F】Mobile Phone Network(dsu,MST)的更多相关文章
- 【Luogu3731】[HAOI2017]新型城市化(网络流,Tarjan)
[Luogu3731][HAOI2017]新型城市化(网络流,Tarjan) 题面 洛谷 给定一张反图,保证原图能分成不超过两个团,问有多少种加上一条边的方法,使得最大团的个数至少加上\(1\). 题 ...
- 【BZOJ5315】[JSOI2018]防御网络(动态规划,仙人掌)
[BZOJ5315][JSOI2018]防御网络(动态规划,仙人掌) 题面 BZOJ 洛谷 题解 显然图是仙人掌. 题目给了斯坦纳树就肯定不是斯坦纳树了,,,, 总不可能真让你\(2^n\)枚举点集再 ...
- 【BZOJ2246】[SDOI2011]迷宫探险(搜索,动态规划)
[BZOJ2246][SDOI2011]迷宫探险(搜索,动态规划) 题面 BZOJ 洛谷 题解 乍一看似乎是可以求出每个东西是陷阱的概率,然而会发现前面走过的陷阱是不是陷阱实际上是会对当前状态产生影响 ...
- 【BZOJ2281】[SDOI2011]黑白棋(博弈论,动态规划)
[BZOJ2281][SDOI2011]黑白棋(博弈论,动态规划) 题面 BZOJ 洛谷 题解 先看懂这题目在干什么. 首先BZOJ上面的题面没有图,换到洛谷看题就有图了. 不难发现都相邻的两个异色棋 ...
- 【BZOJ2227】[ZJOI2011]看电影(组合数学,高精度)
[BZOJ2227][ZJOI2011]看电影(组合数学,高精度) 题面 BZOJ 洛谷 题解 这题太神仙了. 首先\(K<N\)则必定无解,直接特判解决. 现在只考虑\(K\ge N\)的情况 ...
- 【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
[BZOJ1822][JSOI2010]冷冻波(二分,网络流) 题面 BZOJ 洛谷 题解 先预处理每个巫妖可以打到哪些小精灵,然后二分答案,网络流判定即可. #include<iostream ...
- 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)
[BZOJ1560][JSOI2009]火星藏宝图(贪心,动态规划) 题面 BZOJ 洛谷 题解 既然所有的位置的权值都大于\(0\),那么就可以直接贪心,按照行为第一关键字,列为第二关键字,来转移. ...
- 【BZOJ1044】[HAOI2008]木棍分割(动态规划,贪心)
[BZOJ1044][HAOI2008]木棍分割(动态规划,贪心) 题面 BZOJ 洛谷 题解 第一问随便二分一下就好了,贪心\(check\)正确性显然. 第二问随便前缀和+单调队列优化一下\(dp ...
- 【BZOJ2756】奇怪的游戏(二分,网络流)
[BZOJ2756]奇怪的游戏(二分,网络流) 题面 BZOJ Description Blinker最近喜欢上一个奇怪的游戏. 这个游戏在一个 N*M 的棋盘上玩,每个格子有一个数.每次 Blink ...
随机推荐
- Qt 报错LINK2019:无法解析的外部符号
这里用的都是Qt 自己的东西,但是还是抱错,所以怀疑是没有包含进去,尝试了清理项目,重新编译等,还是不行 用到一个最好的办法,就是把构建的文件夹整个删除,在重新编译就可以了 如图所示,把debug和r ...
- Python面试315题
感谢老男孩的武沛齐老师辛苦整理和分享,本文是转自他的博客. 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C# ...
- 解析·NOIP·冷门 CLZ最小环
赐予我力量,去改变我所能改变的;赐予我勇气,去接受我不能改变的;并赐予我智慧,去分辨这两者. -----安东尼达斯 NOIP的图论题中有一部分是跟图上的环有关的.蒟蒻的我在USACO上刷题时发现了一种 ...
- 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现
现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...
- DP入门(2)——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...
- winform 端口serialport简用
最近的一个小项目中需要从串口读取摄像机的应答指令,因此在程序中用到了SerialPort控件(使用SerialPort类也可以). 在SerialPort控件的属性列表中主要注意3个地方: (1)Po ...
- python学习笔记-list的用法
1.list的定义 list = [] list = [1,2,'a','b'](list中的元素不一定是一个类型) 2.list的操作 1)list.append(value) 2)list.ins ...
- android扁平化ProgressBar--progressWheel
ProgressWheel是git是一个开源项目,为开发者提供一个扁平化的ProgressBar,并可对其进行深度定制 1,将ProgressWheel的源码拷贝到项目中 public class ...
- 结对作业 -GUI四则运算
目录: 一.前言(及项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模块 ...
- 【linux】linux中tree的安装
# 2018/7/29 10:17:46测试成功! 一 Tree命令简介 tree是一种递归目录列表命令,产生一个深度缩进列表文件. 二 Tree命令安装 1.下载安装包,地址:http://mama ...