题目链接:https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_e

题意:给出一个 n 个点 m 条边的无向图,每个点和每条边都有权值,让你删除一些边,使得最终的图中满足条件:一条边存在当且仅当包含该边的连通块的点权值和大于等于该边权值,问最少要移走多少条边。

题解:删边不好做,考虑加边,对于每条边,判断加入是否合法。按边权从小到大排序进行加边,要加入一条边之前,若之前两点不连通,则合并起来变成一个连通块,可以用并查集来维护。存在一种情况,加入一些新的边之后,连通块权值增加,之前不能加入的边现在可以加入了,所以要记录之前连通块中已经加入的边的数量和全部边的数量以及最大的边权,便可以计算可以加入的边的数量。

 #include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define mp(a,b) make_pair(a,b)
#define pi acos(-1)
#define pii pair<int,int>
#define pb push_back
#define lowbit(x) ((x)&(-x))
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int maxn = 1e5 + ;
const int maxm = 1e6 + ;
const ll mod = ; int a[maxn],fa[maxn]; struct edge {
int u,v,w;
bool operator < (const edge &x)const {
return w < x.w;
}
}e[maxn]; int findd(int x) {
return x == fa[x] ? x : fa[x] = findd(fa[x]);
} struct node {
int num,mxedge,ok;
ll sum;
}blo[maxn]; int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int n,m;
scanf("%d%d",&n,&m);
for(int i = ; i <= n; i++) scanf("%d",&a[i]);
for(int i = ; i <= m; i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
sort(e + , e + + m);
for(int i = ; i <= n; i++) {
fa[i] = i;
blo[i].num = blo[i].mxedge = blo[i].ok = ;
blo[i].sum = a[i];
}
int ans = ;
for(int i = ; i <= m; i++) {
int u = e[i].u, v = e[i].v, w = e[i].w;
int fu = findd(u), fv = findd(v);
if(fu == fv) {
blo[fu].num++;
blo[fu].mxedge = max(blo[fu].mxedge, w);
} else {
fa[fv] = fu;
blo[fu].num += blo[fv].num + ;
blo[fu].mxedge = max(max(blo[fu].mxedge, blo[fv].mxedge), w);
blo[fu].sum += blo[fv].sum;
blo[fu].ok += blo[fv].ok;
} if(blo[fu].sum >= blo[fu].mxedge) {
ans += blo[fu].num - blo[fu].ok;
blo[fu].ok = blo[fu].num;
}
}
printf("%d\n",m - ans);
return ;
}

AtCoder NIKKEI Programming Contest 2019 E. Weights on Vertices and Edges (并查集)的更多相关文章

  1. atcoder NIKKEI Programming Contest 2019 E - Weights on Vertices and Edges

    题目链接:Weights on Vertices and Edges 题目大意:有一个\(n\)个点\(m\)条边的无向图,点有点权,边有边权,问至少删去多少条边使得对于剩下的每一条边,它所在的联通块 ...

  2. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  3. AtCoder NIKKEI Programming Contest 2019 C. Different Strokes (贪心)

    题目链接:https://nikkei2019-qual.contest.atcoder.jp/tasks/nikkei2019_qual_C 题意:给出 n 种食物,Takahashi 吃下获得 a ...

  4. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  5. 【AtCoder】全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019

    感觉最近好颓,以后不能这么颓了,要省选了,争取省选之前再板刷一面ATC??? A - Subscribers 简单容斥 #include <bits/stdc++.h> #define f ...

  6. NIKKEI Programming Contest 2019 翻车记

    A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> ...

  7. Atcoder Yahoo Programming Contest 2019 简要题解

    A-C 直接放代码吧. A int n,k; int main() { n=read();k=read(); puts(k<=(n+1)/2?"YES":"NO&q ...

  8. AtCoder AISing Programming Contest 2019 Task D. Nearest Card Game

    题目分析在代码注释里. int main() { #if defined LOCAL && !defined DUIPAI ifstream in("main.in" ...

  9. 【AtCoder】AISing Programming Contest 2019

    本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思 ...

随机推荐

  1. 传输json数据到前台的时候,数据中包含日期数据

    问题描述 当从数据库中查询的数据中包含有日期格式的数据的时候,数据传输到前台会报错. 解决方式 // 逐条将日期进行格式化后再传输 Date date = new SimpleDateFormat(& ...

  2. Ctex ERROR Reading

    提供一个"Ctex ERROR Reading"的处理办法 方法/步骤: 1. 再我们打开一些网上下载的文档的时候可能出现错误提示 2. 这种问题一般是文件编码的问题,我们需要选择 ...

  3. vim 常用命令总结(排版精良,内容优质)

    1. 格式说明 <xxx>:尖括号的含义表示这是一个占位参数,也就是必须有的参数,实际输入的内容是 xxx [xxx]:方括号的含义表示这是一个可选参数,也就是可有可无,实际输入的内容是 ...

  4. Python11之列表2(获取、删除列表元素、列表分片、拷贝)

    一.获取列表元素值 列表名 [ 索引值 ] 注:索引值从0开始 nameList = ['詹姆斯','字母哥','乐福','威少','乔治','戴维斯'] nameList[0] '詹姆斯' name ...

  5. PAT(B) 1043 输出PATest(Java)统计

    题目链接:1043 输出PATest (20 point(s)) 题目描述 给定一个长度不超过 10​4​​ 的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest- 这样的 ...

  6. golang开发:环境篇(五)实时加载工具gin的使用

    gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率. 为什么要使用gin 我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须 ...

  7. Python 操作MySQL 数据库

    Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的 ...

  8. Feign 客户端调用错误

    1.@RequestBody 必须要写在实现接口中 2.Feign 客户端调用的时候如果有参数的话,默认是发送post请求 3.服务接口中的请求参数必须要加上@RequestParam("r ...

  9. JMeter-03-元件的作用域与执行顺序

    JMeter元件的作用域与执行顺序 元件的作用域 先来讨论一下元件有作用域.<JMeter基础元件介绍>一节中,我们介绍了8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样 ...

  10. SQL Server元数据查询

    原文:SQL Server元数据查询 1.查询触发器的信息 --查询触发器的信息 select name, --触发器名称 (select name from sys.objects where ob ...