CF76A.Gift

题意:noi2014魔法森林弱化版QwQ,最小化\(max(g_i)*G + max(s_i)*S\)的最小生成树


考虑按g升序加边,用已在生成树中的边和新加入的边求当前最小生成树。

复杂度\(O(nm)\)

vector真好用

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 205, M = 50005;
const ll inf = 2e18+5;inline int read() {int x = 0, f = 1; char c = getchar();while(c<'0' || c>'9') {if(c=='-') f=-1; c=getchar();}while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}return x*f;
}int n, m, G, S;
struct edge {int x, y, g, s;bool operator <(const edge &r) const {return g < r.g;}
} e[M];
bool cmp_s(const edge &a, const edge &b) {return a.s < b.s;
}
int fa[N];
int find(int x) {return x == fa[x] ? x : fa[x] = find(fa[x]);}vector<edge> v;
vector<edge>::iterator it;
ll ans = inf;
ll kruskal(int m) { //printf("kruskal %d\n", m);int mg = 0, ms = 0;for(int i=1; i<=n; i++) fa[i] = i;int cnt = 0;for(it = v.begin(); it != v.end(); ) {int x = find(it->x), y = find(it->y);//printf("%d %d    %d %d\n", e[i].x, e[i].y, x, y); cout << endl;if(x == y) {it = v.erase(it);continue; }fa[y] = x;mg = max(mg, it->g);ms = max(ms, it->s);if(++cnt == n-1) break;it++;}if(cnt == n-1) return (ll) mg * G + (ll) ms * S;else return inf;
}void solve() {sort(e+1, e+1+m);for(int i=1; i<=n-2; i++) v.push_back(e[i]);sort(v.begin(), v.end(), cmp_s);for(int p=n-1; p<=m; p++) { //printf("ppp %d\n", p);edge now = e[p];int flag = 0;for(it = v.begin(); it != v.end(); it++) {if(it->s > now.s) {v.insert(it, now);flag = 1;break;}}if(!flag) v.insert(it, now);ans = min(ans, kruskal(p));}if(ans == inf) ans = -1;cout << ans;
}int main() {//freopen("in", "r", stdin);cin >> n >> m >> G >> S;;for(int i=1; i<=m; i++) {e[i].x = read();e[i].y = read();e[i].g = read();e[i].s = read();}solve();
}

转载于:https://www.cnblogs.com/candy99/p/9408652.html

CF76A.Gift [最小生成树]相关推荐

  1. CF76A·gift

    初见安~[第一次写CF的题解QwQ]这里是传送门:Codeforces 76A Description The kingdom of Olympia consists of N cities and  ...

  2. codeforces 76A Gift 最小生成树

    题意: 给定一张无向连通图,每条边有两个权值(g,s). 给定G,S. 让你给出一组(g0,s0)使得图中仅留下g<=g0,s<=s0的边之后,依然连通,并求G*g0+S*s0的最小值. ...

  3. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  4. [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

    L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...

  5. 图的算法专题——最小生成树

    概要: Prim算法 Kruskal算法 1.Prim算法 算法流程: (1)对图G(V,E)设置集合S来存放已被并入的顶点,然后执行n次(2)(3) (2)每次从未并入顶点集合中选择与集合S最近的一 ...

  6. 【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理

    蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我 ...

  7. Educational Codeforces Round 9 F. Magic Matrix 最小生成树

    F. Magic Matrix 题目连接: http://www.codeforces.com/contest/632/problem/F Description You're given a mat ...

  8. [vijos1234]口袋的天空最小生成树

    题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...

  9. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

最新文章

  1. shell脚本中使用top命令查看cpu或内存情况的技巧
  2. 寄存器和常用的汇编指令
  3. maven 分批打包_maven批量打包,并且显示打包结果
  4. 排查 .NET开发的工厂MES系统 内存泄漏分析
  5. Thread类的有关常用方法
  6. linux centos 光盘修复,CentOS7删除/boot/initramfsxxx.img并尝试光盘救援模式修复
  7. [轉]C# 中的委托和事件
  8. Hbase快照Snapshot 数据备份、恢复与迁移
  9. hackthon java_Hackathon 参赛指南——如何愉快地参加一场 Hackathon
  10. 2019牛客国庆集训派对day5 K(2017四川省赛)
  11. idea发现git出现cannot run git:cannot identify version of git executable :no response
  12. 2017安防摄像头发展趋势分析
  13. android_10.0.0_r41自定义驱动编译+Framework层调用_2(自定义驱动)
  14. git 新建分支 推送到远程 首次pull代码报错 git branch --set-upstream-to=origin/<branch>
  15. NBUT 1225 NEW RDSP MODE I(找规律)(快速幂)
  16. fmdb的一些基本的用法
  17. 利用Webrtc-streamer展示rstp视频流
  18. android gradle 版本部队,gradle中统一配置版本的小技巧。
  19. PL/0语言 词法分析
  20. 元宇宙迷思:科幻世界内外,“元宇宙”都几乎没有意义……

热门文章

  1. JNLP : Java Glossary
  2. LeetCode 5197
  3. Maven-Archetype Catalog
  4. 注册Netgear DDNS账号的操作
  5. Python批量修改单个文件夹文件后缀
  6. 电子漫画系列更新4张震撼美图,共计62张,迫不及待想分享给你们!
  7. Android使用NFC模拟M卡实现 (二)
  8. error LNK2019: 无法解析的外部符号 XXXXXXXXX,该符号在函数XXX中被引用
  9. 论文编辑与投稿——word另存PDF显示“错误!未找到引用源”的解决方案
  10. RSA加密与解密(Java实现)