Out of Hay最小生成树

Out of Hay
原题链接https://vjudge.net/contest/352170#problem/D
在这里插入图片描述
在这里插入图片描述
题意为给出n个地点之间的m条路,计算链接到所以地点的最短的路中最长的一截的长度。相较于板子,增加一步判断大小,选择最大的一条路即可。
Prim:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
const int INF = 0x3f3f3f3f;
long long map[3005][3005];
long long dis[300005];
bool vis[300005];
long long ans;
long long n;
long long maxx;
void prim()
{
    ans = 0;
    long long i, j;
    for (i = 1; i <= n; i++)
    {
        dis[i] = map[1][i];
        vis[i] = false;
    }
    vis[1] = true;
    for (i = 0; i < n - 1; i++)
    {
        long long minn = INF;
        long long p = 1;
        for (j = 1; j <= n; j++)
        {
            if (!vis[j] && dis[j] < minn)
            {
                minn = dis[j];
                p = j;
            }
        }
        // cout << "***" << endl;
        //  for (j = 1; j <= n; j++)
        //  {
        //      cout << dis[j] << " ";
        //   }
        //    cout << endl;
        if (minn == INF)
        {
            ans = -1;
            return;
        }
        ans += minn;
        maxx = max(maxx, minn);//选取我们选的路中最大的一条。
        vis[p] = true;
        for (j = 1; j <= n; j++)
        {
            if (!vis[j] && dis[j] > map[p][j])
            {
                dis[j] = map[p][j];
            }
        }
    }
    return;
}
int main()
{
    long long m;
    long long i, j;
    scanf("%lld %lld", &n, &m);
    for (i = 0; i <= n; i++)
    {
        for (j = 0; j <= n; j++)
        {
            map[i][j] = INF;
        }
    }
    while (m--)
    {
        long long a, b, w;
        scanf("%lld %lld %lld", &a, &b, &w);
        if (w < map[a][b])//尤其要注意读取地图只要最小的一条路,因为这个wa了3发,Emmmm.
        {
            map[a][b] = w;
        }
        if (map[b][a] > w)
        {
            map[b][a] = w;
        }
    }
    maxx = -1;
    prim();
    cout << maxx << endl;
    return 0;
}

Kruskal:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
long long pre[300005];
long long map[3005][3005];
struct node
{
	long long u;
	long long v;
	long long w;
} stu[300005];
long long ans;
long long cnt;
long long maxx;
bool cmp(node x, node y)
{
	return x.w < y.w;
}
long long find(long long x)
{
	if (x == pre[x])
	{
		return x;
	}
	return pre[x] = find(pre[x]);
}
void join(long long x, long long y, long long w)
{
	long long ss1 = find(x);
	long long ss2 = find(y);
	if (ss1 != ss2)
	{
		pre[ss2] = ss1;
		ans += w;
		maxx = max(maxx, w);//选取最长的一条路。
		cnt--;
	}
}
int main()
{
	long long n, i, m;
	scanf("%lld %lld", &n, &m);
	ans = 0;
	cnt = n;
	for (i = 0; i <= n; i++)
	{
		pre[i] = i;
	}
	for (i = 0; i < m; i++)
	{
		scanf("%lld %lld %lld", &stu[i].u, &stu[i].v, &stu[i].w);
	}
	sort(stu, stu + m, cmp);
	/*	for (i = 0; i < k; i++)
	{
		printf("*%lld %lld %lld\n", stu[i].u, stu[i].v, stu[i].w);
	}
	for (i = 0; i <= n;i++)
	{
		cout << pre[i] << endl;
	}
		cout << endl;*/
	maxx = -1;
	for (i = 0; i < m; i++)
	{
		join(stu[i].u, stu[i].v, stu[i].w);
		if (cnt == 1)
		{
			break;
		}
	}
	if (cnt > 1)
	{
		ans = -1;
	}
	cout << maxx << endl;
	return 0;
}
利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值