P2126 Mzc家中的男家丁(克鲁斯卡尔算法(Kruskal算法)求最小生成树)

https://www.luogu.com.cn/problem/P2126
题目背景
mzc与djn的…还没有众人皆知,所以我们要来宣传一下。

题目描述
mzc家很有钱(开玩笑),他家有n个男家丁,现在mzc要将她们全都聚集起来(干什么就不知道了)。现在知道mzc与男家丁们互相之间通信的时间,请算出把他们每个人叫到需要的总时间(要重复的哦)。保证能把他们每个人叫到。

输入格式
第一行有一个数n,表示有n个男家丁。第二行一个数m表示有m条通信路线。之后m行,每行三个数a[i],b[i],c[i],表示第a[i]个男家丁(或mzc)和第b[i]个男家丁(或mzc)通信需要时间(双向)。ai=0表示mzc。

输出格式
一行,一个数sum,表示把他们每个人叫到需要的总时间。

输入输出样例
输入 #1 复制
5
12
0 2 15
2 3 20
3 5 13
1 3 29
0 1 30
2 4 21
0 3 23
5 1 48
0 4 17
0 5 27
1 2 43
2 5 41
输出 #1 复制
94
说明/提示
n<=2300

m<=400000

克鲁斯卡尔算法(Kruskal算法)求最小生成树的三步骤:

1.初始化
for(int i=0; i<=n; ++i) fa[i] = i;//初始化
2.查找
int findFather(int x){//查找 
	while(x != fa[x])
		x = fa[x];
	return x;
}
3.合并
void Union(int a, int b) {
  int faA = findFather(a);
  int faB = findFather(b);
  if(faA != faB)
    fa [faA] = faB;
}
#include<bits/stdc++.h>
using namespace std;
#define N 400005
int n, m, fa[N], ans;
struct node{
	int x, y, w;
}a[N]; 
bool cmp(node t, node p){
	return t.w < p.w;
}
int findFather(int x){//查找 
	while(x != fa[x])
		x = fa[x];
	return x;
}
int main(){
	cin >> n >> m;
	for(int i=1; i<=m; ++i){
		cin >> a[i].x >> a[i].y >> a[i].w; 
	}
	sort(a+1, a+m+1, cmp);//按权重从小到大排序
	for(int i=0; i<=n; ++i) fa[i] = i;//初始化,先令它们属于各自不同的集合,父结点都是自己(注意下标从0开始):
	for(int i=1; i<=m; ++i){
		//合并 
		int faX = findFather(a[i].x);
		int faY = findFather(a[i].y);
		if(faX != faY){
			fa[faX] = faY;
			ans += a[i].w; 
		}
	} 
	printf("%d", ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取并下载https://v.qq.com/x/cover/mzc002005343uyn/p0046atcndk.html页面所有视频,需要进行以下步骤: 1. 使用Java的HttpURLConnection或HttpClient等网络请库,模拟浏览器访问腾讯视频网站,获取视频页面的HTML源代码。 2. 分析HTML源代码,提取出视频的播放链接。 3. 分析播放链接,获取视频的真实地址。 4. 使用Java的IO流和文件操作,将视频文件下载到本地。 具体实现步骤如下: 1. 使用Java的HttpURLConnection或HttpClient等网络请库,模拟浏览器访问腾讯视频网站,获取https://v.qq.com/x/cover/mzc002005343uyn/p0046atcndk.html页面的HTML源代码。 2. 分析HTML源代码,找到视频播放链接所在的标签,使用Java的正则表达式或解析HTML的库,例如Jsoup,提取出所有视频的播放链接。 ``` String html = "https://v.qq.com/x/cover/mzc002005343uyn/p0046atcndk.html"; // 视频页面链接 String videoUrlRegex = "https://[^\"]+.mp4"; // 视频地址的正则表达式 List<String> videoUrls = new ArrayList<>(); // 存放所有视频地址的列表 // 使用Jsoup解析HTML源代码,并提取出所有视频播放链接 Document doc = Jsoup.connect(html).get(); Elements videoElements = doc.select("video"); // 找到所有video标签 for (Element videoElement : videoElements) { String videoUrl = videoElement.attr("src"); // 获取video标签的src属性 if (videoUrl.matches(videoUrlRegex)) { // 验证是否是视频地址 videoUrls.add(videoUrl); } } ``` 3. 分析播放链接,获取视频的真实地址。由于腾讯视频的播放链接有一定的加密,需要使用浏览器开发者工具分析链接的参数和算法,并在Java程序中模拟生成请参数,然后发送HTTP请获取真实地址。 4. 使用Java的IO流和文件操作,将视频文件下载到本地。获取到视频真实地址后,使用Java的IO流和文件操作,将视频文件从网络上下载到本地。 ``` for (String videoUrl : videoUrls) { URL url = new URL(videoUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); InputStream in = conn.getInputStream(); FileOutputStream out = new FileOutputStream("video.mp4"); // 保存视频的文件名 byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close(); } ``` 需要注意的是,腾讯视频对于视频有一些限制,如播放链接有时效性等,需要在开发中注意处理这些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值