Applese 的毒气炸弹(最小生成树)
链接:https://ac.nowcoder.com/acm/contest/330/G
来源:牛客网
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
众所周知,Applese 是个很强的选手,它的化学一定很好。
今天他又AK了一套题觉得很无聊,于是想做个毒气炸弹玩。
毒气炸弹需要 k 种不同类型元素构成,Applese一共有 n 瓶含有这些元素的试剂。
已知元素混合遵循 m 条规律,每一条规律都可以用 "x y c" 描述。
表示将第 x 瓶试剂混入第 y 瓶试剂或者把第 y 瓶试剂混入第 x 瓶试剂,需要消耗 c 的脑力。
特别地,除了这 m 条规律外,Applese 可以将任意两瓶相同元素的试剂混合,且不需要消耗脑力。
Applese 想要配出毒气炸弹,就需要使 S 中含有 1∼k1∼k 这 k 种元素。它想知道自己最少花费多少脑力可以把毒气炸弹做出来。
输入描述:
第一行为三个整数 n, m, k 表示 Applese 拥有的试剂的数量,混合规律的数量和所需的元素种类数。
第二行为 n 个整数 a1,a2,…,ana1,a2,…,an,分别表示每一瓶试剂的元素类型。
接下来m行,每行三个整数 x, y, c,含义如题目描述中所述。不保证 x, y的试剂种类不同。
输出描述:
输出一个正整数表示最小的耗费脑力。特别地,如果无法合成出毒气炸弹,输出 "-1"。
示例1
输入
6 8 2
1 1 1 2 2 2
1 2 1
2 3 2
1 3 3
3 4 6
4 5 1
4 6 3
5 6 2
1 6 2
输出
2
备注:
1≤n,k,m≤10^5 1≤n,k,m≤10^5
1≤x,y≤n,x≠y1≤x,y≤n,x≠y
1≤c≤10^9
思路:基本最小生成树裸题,注意一下相同的情况和long long 开sum即可代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 100005
using namespace std;
int pre[MAXN];
struct node
{
int x,y;
int val;
}p[MAXN];
int a[MAXN];
int find(int x)
{
if(x!=pre[x])
{
return pre[x]=find(pre[x]);
}
else
{
return x;
}
}
bool merge(int x,int y)
{
int xx=find(x);
int yy=find(y);
if(xx!=yy)
{
pre[xx]=yy;
return true;
}
else
{
return false;
}
}
bool cmp(node x,node y)
{
return x.val<y.val;
}
int main()
{
int n,m,k;
cin>>n>>m>>k;
for(int t=1;t<=k;t++)
{
pre[t]=t;
}
for(int t=1;t<=n;t++)
{
scanf("%d",&a[t]);
}
for(int t=1;t<=m;t++)
{
scanf("%d%d%d",&p[t].x,&p[t].y,&p[t].val);
if(a[p[t].x]==a[p[t].y])
{
p[t].val=0;
}
}
sort(p+1,p+m+1,cmp);
int cnt=0;
long long int sum=0;
for(int t=1;t<=m;t++)
{
if(cnt==k-1)
{
break;
}
if(merge(a[p[t].x],a[p[t].y]))
{
sum+=p[t].val;
cnt++;
}
}
if(cnt<k-1)
{
cout<<"-1"<<endl;
}
else
printf("%lld\n",sum);
return 0;
}
Applese 的毒气炸弹(最小生成树)的更多相关文章
- Applese的毒气炸弹-最小生成树Kruskal算法
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 题目描述 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很 ...
- Applese 的毒气炸弹 G 牛客寒假算法基础集训营4(图论+最小生成树)
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 Applese 的毒气炸弹 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262 ...
- 牛客寒假算法基础集训营4 G Applese 的毒气炸弹
链接:https://ac.nowcoder.com/acm/contest/330/G来源:牛客网 众所周知,Applese 是个很强的选手,它的化学一定很好. 今天他又AK了一套题觉得很无聊,于是 ...
- Electrification Plan 最小生成树(prim+krusl+堆优化prim)
题目 题意: 无向图,给n个城市,n*n条边,每条边都有一个权值 代表修路的代价,其中有k个点有发电站,给出这k个点的编号,要每一个城市都连到发电站,问最小的修路代价. 思路: prim:把发电站之间 ...
- 最小生成树(Kruskal算法-边集数组)
以此图为例: package com.datastruct; import java.util.Scanner; public class TestKruskal { private static c ...
- 最小生成树计数 bzoj 1016
最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...
- poj 1251 Jungle Roads (最小生成树)
poj 1251 Jungle Roads (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...
- 【BZOJ 1016】【JSOI 2008】最小生成树计数
http://www.lydsy.com/JudgeOnline/problem.php?id=1016 统计每一个边权在最小生成树中使用的次数,这个次数在任何一个最小生成树中都是固定的(归纳证明). ...
- 最小生成树---Prim算法和Kruskal算法
Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...
随机推荐
- ListView里面嵌套CheckBox
布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andro ...
- MyBatis配置Setting详细说明
该表格转载自http://blog.csdn.net/summer_yuxia/article/details/53169227 setting是指定MyBatis的一些全局配置属性,这是MyBati ...
- [转]SQL 模糊查询
在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表 ...
- 定时node-schedule 模块的使用
You can install using npm. npm install node-schedule var schedule = require('node-schedule'); var j ...
- C++面向对象类的实例题目二
题目描述: 编写一个程序,设计一个产品类Product,其定义如下: class Product { public: Product(char *n,int p,int q); //构造函数 ~Pro ...
- CF938D Buy a Ticket
这个题都想不出来,感觉
- Integer类的parseInt和valueOf的区别
我们平时应该都用过或者见过parseInt和valueOf这两个方法.一般我们是想把String类型的字符数字转成int类型.从这个功能层面来说,这两个方法都一样,都可以胜任这个功能. 但是,我们进入 ...
- Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决
vmtool安装流程 1.点击vmware 里面的虚拟机——>安装vmware tool 2.然后(等待一会)弹出一个界面把里面的 VMwareTools-9.6.1-1378637.tar.g ...
- Java泛型读书笔记 (一)
Java泛型 在Java SE7和之后的版本中,在new一个泛型类实例的时候,可以不传入类型参数,因为Java编译器可以通过赋给的变量类型声明推断出来,如下代码: ArrayList<Strin ...
- Android - AndroidStudio 的熟悉
开发环境 * JDK * SDK * AndroidStudio * Genimotioin HelloWorld [ 第一个Android项目建立 ] * 创建项目 [ 项目相关目录 ] Hell ...