Mobile Phone Network CodeForces - 1023F (最小生成树)
大意: 无向图, 其中k条边是你的, 边权待定, m条边是你对手的, 边权已知. 求如何设置边权能使最小生成树中, 你的边全被选到, 且你的边的边权和最大. 若有多棵最小生成树优先取你的边.
先将$k$条边合并, 然后按边权从小到大添对手的边, 若连通, 则树链取最小值, 否则合并一下.
正确性其实很显然.
然后对于树链取最小有多种方法, 强制在线可以树剖$O(nlog^2n)$, 可以离线的话可以用倍增$O(nlogn)$, 或者并查集$O(n)$.
#include <iostream>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
using namespace std;
typedef long long ll;
const int N = 1e6+10;
int n, k, m, cnt, fa[N];
struct _ {int to,id;} pre[N];
vector<_> g[N];
struct {int u,v,w;} e[N];
int Find(int x) {return fa[x]?fa[x]=Find(fa[x]):x;}
int dep[N], ans[N]; void dfs(int x, int d, int f) {
dep[x] = d;
for (_ e:g[x]) if (e.to!=f) {
pre[e.to] = {x,e.id};
dfs(e.to,d+1,x);
}
} int main() {
scanf("%d%d%d", &n, &k, &m);
int tot = 0;
while (k--) {
int u, v;
scanf("%d%d", &u, &v);
fa[Find(u)] = Find(v);
g[u].pb({v,1}),g[v].pb({u,1});
}
REP(i,1,m) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
int uu = Find(u), vv = Find(v);
if (uu==vv) e[++cnt]={u,v,w};
else {
fa[uu] = vv;
g[u].pb({v,0}), g[v].pb({u,0});
}
}
dfs(1,0,0);
memset(fa,0,sizeof fa);
REP(i,1,cnt) {
int u = e[i].u, v = e[i].v, w = e[i].w;
while (Find(u)!=Find(v)) {
if (dep[u]<dep[v]) swap(u,v);
if (Find(u)!=Find(pre[u].to)) {
fa[u] = Find(pre[u].to);
ans[u] = w;
}
u = Find(u);
}
}
ll sum = 0;
REP(i,1,n) if (pre[i].to&&pre[i].id) {
if (!ans[i]) return puts("-1"),0;
else sum += ans[i];
}
printf("%lld\n", sum);
}
Mobile Phone Network CodeForces - 1023F (最小生成树)的更多相关文章
- Mobile Phone Network CodeForces - 1023F(并查集lca+修改环)
题意: 就是有几个点,你掌控了几条路,你的商业对手也掌控了几条路,然后你想让游客都把你的所有路都走完,那么你就有钱了,但你又想挣的钱最多,真是的过分..哈哈 游客肯定要对比一下你的对手的路 看看那个便 ...
- 「CF1023F」Mobile Phone Network
「CF1023F」Mobile Phone Network 传送门 直接钦定那 \(k\) 条边在最小生成树中,然后把最小生成树树剖一下. 每条其它边的效果就是把该边端点路径上的边的权对该边边权取 \ ...
- Codeforces1023F Mobile Phone Network 【并查集】【最小生成树】
题目大意: 给一些没安排权值的边和安排了权值的边,没被安排的边全要被选入最小生成树,问你最大能把它们的权值和安排成多少.题目分析:假设建好了树,那么树边与剩下的每一条边都能构成一个环,并且非树边的权值 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
- Arctic Network POJ 2349 (最小生成树思想)
Description The Department of National Defence (DND) wishes to connect several northern outposts by ...
- POJ2349:Arctic Network(二分+最小生成树)
Arctic Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 28311 Accepted: 8570 题 ...
- ZOJ 1586 QS Network Kruskal求最小生成树
QS Network Sunny Cup 2003 - Preliminary Round April 20th, 12:00 - 17:00 Problem E: QS Network In the ...
- codeForces 472D 最小生成树
题目大意:给出一个图中点的两两距离,问是否是一棵树,若是,求出平均边权最大的点 prim最小生成树,若原图是树,则最小生成树的距离就是原距离.否则不是. 搞出来树了,第二问随便dfs就好了. #inc ...
- Xor-MST CodeForces - 888G (最小生成树,分治)
大意: n结点无向完全图, 给定每个点的点权, 边权为两端点异或值, 求最小生成树
随机推荐
- java maven scope compile,provide,system,test,runtime
在一个maven项目中,如果存在编译需要而发布不需要的jar包,可以用scope标签,值设为provided.如下: <dependency> <groupId ...
- TortoiseSVN 使用教程
TortoiseSVN 使用教程 TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. TortoiseSVN 安装 下载地址:https ...
- 画布之ShapeDrawable
package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...
- nineoldandroids开源库
Android3.0 推出AnimationAPI ,使用起来比较方便,但是不能再3.0以下版本中使用.nineoldandroids开源库可以在任意版本上使用,官网地址:http://nineold ...
- 动画之Evaluator
Evaluator就是通过监听器拿到当前动画对对应的具体数值,作用在于从插值器返回的数值进行转换成对应的数值.简单来说就是转换器 Evaluator返回值的类型更加动画中值决定的,所以在使用的时候注意 ...
- javascript已存在的对象构造器中是不能添加新的属性的:
<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程 ...
- attrib命令能用批处理实现文件夹批量显示吗?
attrib H:\* -s -h -a -r /s /d 加上/s /d参数就行了.(H表示你的U盘盘符)
- 24Flutter中常见的表单有TextField单行文本框,TextField多行文本框、CheckBox、Radio、Switch
一.Flutter常用表单介绍: CheckboxListTile.RadioListTile.SwitchListTile.Slide. 二.TextField:表单常见属性: maxLines:设 ...
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码
python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...
- LD_LIBRARY_PATH无效
在os x 上设置LD_LIBRARY_PATH无效,env命令看不到这个变量,下面的文章说明了这个问题 说明:网上基本针对这个值的设置分为两面,Windows派和Linux派,Windows的不说, ...