文章目录

  • 题目描述
  • 解析
  • 代码
  • thanks for reading!

题目描述

解析

其实就是修建道路
我一开始只能想到枚举g去跑最小生成树
m^2的算法(50pts)
但是其实每次加入的边只有一条
而且之前都不在最小生成树上的边以后也肯定不会在
所以可以建一个新的边的集合存当前生成树的边
这个集合的边最多只有n条
这样复杂度就降为n*m
可以通过本题

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 600;
const int M = 1e5 + 100;
int n, m;
ll wwg, wws;
struct node {int x, y;ll g, s;bool operator<(const node y) const { return g < y.g; }
} p[M], p2[N], now[N];
int tot;
int fa[N];
int find(int x) {if (fa[x] == x)return x;return fa[x] = find(fa[x]);
}
ll ans = 2e18;
bool cmp(node x, node y) { return x.s < y.s; }
void kruscal(int k) {for (int i = 1; i <= tot; i++) {p2[i] = now[i];}p2[tot + 1] = p[k];sort(p2 + 1, p2 + 1 + tot + 1, cmp);for (int i = 1; i <= n; i++) fa[i] = i;ll num = 0, gmax = 0, smax = 0;for (int i = 1; i <= tot + 1; i++) {int xx = find(p2[i].x), yy = find(p2[i].y);if (xx != yy) {fa[xx] = yy;gmax = max(gmax, p2[i].g);smax = max(smax, p2[i].s);now[++num] = p2[i];}}tot = num;if (num == n - 1) {ans = min(ans, gmax * wwg + smax * wws);}
}
int main() {scanf("%d%d%lld%lld", &n, &m, &wwg, &wws);for (int i = 1; i <= m; i++) {scanf("%d%d%lld%lld", &p[i].x, &p[i].y, &p[i].g, &p[i].s);}sort(p + 1, p + 1 + m);for (int i = 1; i <= m; i++) {kruscal(i);//      printf("i=%d tot=%d\n",i,tot);}if (ans != 2e18)printf("%lld", ans);elseprintf("-1");return 0;
}
/*
3 3
2 1
1 2 10 15
1 2 4 20
1 3 5 1
*/

thanks for reading!

不止代码:保留道路(ybtoj 最小生成树)相关推荐

  1. 不止代码,职业发展黄金手册

    花了小半天时间,读完了阿里人出品的<不止代码,职业发展黄金手册>,记录下其中的诸多闪光点. 如何快速成长为技术大牛? 做的更多,做的比你主管安排给你的任务更多. 需求分析的时候更加准确,能 ...

  2. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1709  Solved ...

  3. Jungle Roads丛林道路(最小生成树PrimKruskal算法)

    Jungle Roads丛林道路 POJ - 1251 目录 Jungle Roads丛林道路 题意描述 Kruskal算法解题思路 Kruskal AC代码 Prim 解题思路 AC代码 The H ...

  4. 不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)

    文章目录 题目描述 总结 解析 解法1 解法2 代码 解法3 代码 题目描述 金明的预算方案 选课 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是, ...

  5. 不止代码:机器分配(动态规划)

    题目描述 解析 头疼 什么破题 就是一个dp寻找最优性决策的常规题 但是要输出过程,可以使用递归输出 但是! 这题数据的意思是:存在a[i]=a[i+1]的情况,且在不影响利润的情况下,机器要尽可能的 ...

  6. 不止代码:合唱队列(动态规划)

    文章目录 题目描述 解析 1.n^2^朴素算法 2.队列nlogn算法 代码 3.二维DP(n^2^) 代码 thanks for reading! 题目描述 五一到了,PKU-ACM队组织大家去登山 ...

  7. 不止代码:生日欢唱(ybtoj-区间dp)

    文章目录 题目描述 解析 代码 thanks for reading! 题目描述 解析 '这题挺好的 思路:dp[i][j]表示必须把i和j配对,可达到的最大值 首先: dp[i][j]=dp[i-1 ...

  8. 不止代码:恐狼后卫(ybtoj-区间dp)

    文章目录 题目描述 解析 代码 thanks for reading! 题目描述 一代炉石的眼泪啊 解析 用dp[i][j]表示i与j之间的全部消掉(不含两端)的最小花费 然后枚举中间最后杀死的狼就行 ...

  9. 不止代码:友好城市(动态规划)

    解析 先按左端点排序得到一个右端点的新队列,然后就可以发现: 所有合法的方案都是新队列的一个单调递增队列 然后就转化成了最长上升序列的问题 代码 #include<bits/stdc++.h&g ...

最新文章

  1. ACL Fellow 2021名单出炉!华为刘群、中科院自动化所宗成庆当选!
  2. Python: strip()和split()的用法与区别
  3. 深度案例 | TO B 企业如何从 0 到 1 实现数据驱动?
  4. mysql 核心目录
  5. 《C语言程序设计与实践(第2版)》——第1章 C语言与程序设计概述 1.1初见C语言程序...
  6. yelee主题安装gitalk(转载+整理)
  7. django 修改html无变化,Django Pycharm 修改html后立即刷新页面
  8. Python编程从入门到实践~if语句
  9. 【Prince2科普】P2七大主题之商业论证
  10. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的在线音乐网站
  11. discuz php 扩展环境 不支持,配置php扩展memcache
  12. 如何创建线程?如何实现Runnable接口?
  13. Java数据类型分类 1
  14. java 次方_Java入门笔记0/3(基本数据结构)
  15. 【信号与系统】Multisim 仿真信号合成与分解
  16. [转]最常用的商务职场英语邮件100个句式
  17. SIW-微带过渡结构
  18. oracle exp 排除某些表导出其他表
  19. MyBatis-plus自动填充功能之自动填充时间
  20. 知物由学 | iOS AssetBundle资源保护

热门文章

  1. 谁的代码注释我都不服,就服你的!
  2. echarts 时间曲线图_制作按时间每秒实时更新的echarts折线图
  3. linux启动mysql_Linux服务器安装Mysql教程
  4. linux accept过程,Linux协议栈accept和syn队列问题
  5. windows传真和扫描由于不能访问您的文档_扫描识别工具Dynamic Web TWAIN全年最低价来了!错过再等一年...
  6. session.setAttribute和request.setAttribute的区别
  7. 一个例子带你搞懂python作用域中的global、nonlocal和local
  8. [mybatis]逆向工程MGB基本编写
  9. [C++11]自动类型推导auto
  10. Coins POJ - 1742(多重背包+是否装满问题)