【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 ...
随机推荐
- 【数据库】 SQLite 语法
[数据库] SQLite 语法 一 . 创建数据库 1. 只需创建数据库,只需创建文件,操作时将连接字符串指向该文件即可 2. 连接字符串 : data source = FilePath; 不能加密 ...
- android中的文件(图片)上传
android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...
- TFTP & commons-net-3.3.jar
项目需求:上传文件到服务器,TFTP 了解TFTP http://wenku.baidu.com/link?url=MhRVgIySotFMkm5ar6B71zROPMoqC7cd5cSbKJo2kx ...
- ABP框架设置默认语言
在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...
- jmeter无法启动的解决办法
jmeter下载地址: 链接: https://pan.baidu.com/s/15YhiPH-kNVxISEZ4Mxf_WA 提取码: 25sv jdk 8.0 下载地址: 链接: http ...
- LR创建数据源读取excel
1 在window上创建数据源 2 创建对应的数据文件 excel 注:注意格式和底部的表单名称 3 Vegen中创建参数 注意:机器数据源选择windows的ODBC数据源 SQL查的是(she ...
- 常用模块(数据序列化 json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
- android4.1 Wifi 浅析
简单分析下wifi相关类,首先了解几个主要概念 AsyncChannel 简单理解: AsyncChannel,就是借助Messenger 机制,让两个不同的handler之间进行通信. AsyncC ...
- JavaSE复习(二)集合
Collection List(存取有序,有索引,可以重复) ArrayList 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢 LinkedList 底层是链表实现的,线程不安全,增和删比 ...
- postgres(pl/pgsql)
复制后期看 https://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html https://www.cnblogs.com/ ...