还是畅通工程(最小生成树+kruskal+并查集)(Edmonds-Karp )

Python图论与最短路径算法实战:从NetworkX基础到数学建模应用 图论作为离散数学的重要分支,通过节点和边的抽象模型描述实体间复杂关系,其核心思想是将现实问题转化为网络结构进行分析。Dijkstra等最短路径算法基于贪心策略,通过迭代松弛操作寻找两点间最优路径,在时间复杂度与最优性间取得平衡。这类算法在工程实践中具有极高价值,能够为物流配送、交通规划、通信网络等场景提供量化决策支持。本文以Python的NetworkX库为工具,深入解析图结构创建、属性查询与可视化方法,并重点演示如何将城市交通网络抽象为加权图,利用Dijkstra算法求解最优运输路径。通过环境配置、代码实 阅读详情

还是畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 83465    Accepted Submission(s): 37836


 

Problem Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
 

Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
 

Output
对每个测试用例,在1行里输出最小的公路总长度。
 

Sample Input
 
 
3 1 2 1 1 3 2 2 3 4 4 1 2 1 1 3 4 1 4 1 2 3 3 2 4 2 3 4 5 0
 

Sample Output
 
 
3 5
Hint
Hint
Huge input, scanf is recommended.
 

Source
/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
typedef long long  ll;
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int MAXN = 305;
const int INF = 0x3f3f3f3f;
const int N=5e4+7;
const int maxn=1e5+5;
const double EPS=1e-10;
const double Pi=3.1415926535897;
//inline double max(double a,double b){
//    return a>b?a:b;
//}
//inline double min(double a,double b){
//    return a<b?a:b;
//}
 
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
 

//start
struct node {
    int u,v,w;
}e[100010];
int fa[100010];
int n,m;
bool cmp(node a,node b) //边的排序
{
    return a.w<b.w;
}
void init(){ //初始化
    for(int i=1;i<=m;i++){
        fa[i]=i;
    }
}
int find(int x){ //并查集
    if(x==fa[x]) return x;
    return fa[x]=find(fa[x]);
}
int kruskal(){
    init();
    int ans=0;
    sort(e+1,e+m+1,cmp);
    for(int i=1;i<=m;i++){
        int a=find(e[i].u);
        int b=find(e[i].v);
        if(a==b)  continue; //防止圈的出现
        fa[b]=a;
        ans+=e[i].w;
    }
    return ans;
}
int main(){
    cin>>n;
    m=(n-1)*n/2;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        e[i].u=a;
        e[i].v=b;
        e[i].w=c;
    }
    cout<<kruskal()<<endl;
}
//end

Edmonds-Karp算法实现:

/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
typedef long long  ll;
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int MAXN = 305;
const int INF = 0x3f3f3f3f;
const int N=5e4+7;
const int maxn=1e5+5;
const double EPS=1e-10;
const double Pi=3.1415926535897;
//inline double max(double a,double b){
//    return a>b?a:b;
//}
//inline double min(double a,double b){
//    return a<b?a:b;
//}
 
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
 

//start
int n,m;
int g[10010][10010];
int pre[10010];
int bfs(int s,int t){
    int flow[10010];
    mms(pre,-1);
    flow[s]=INF; //初始化起点
    pre[s]=0;
    queue<int>q;
    q.push(s);
    while (!q.empty()) {
        int u=q.front();
        q.pop();
        if(u==t) break; //到达终点退出
        for(int i=1;i<=m;i++){ //BFS所有的点
            if(i!=s&&g[u][i]>0&&pre[i]==-1){
                pre[i]=u; //记录途径
                q.push(i);
                flow[i]=min(g[u][i],flow[u]); //更新结点流量
            }
        }
    }
    if(pre[t]==-1) return -1; //没有找到增广路
    return flow[t];//返回该路的流量
}
int maxflow(int s,int t){
    int MaxFlow=0;
    while (1) {
        int flow=bfs(s,t); //搜索最大流
        if(flow==-1) break; //没有找到新的增广路 退出
        int cur=t; //终点开始更新
        while (cur!=s) {
            int father=pre[cur]; //更新残留网络
            g[father][cur]-=flow; //正向+反向-
            g[cur][father]+=flow;
            cur=father;
        }
        MaxFlow+=flow;
    }
    return MaxFlow;
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]+=c; //可能有重边
    }
    cout<<maxflow(1,m);
}
//end

图与网络模型实战指南:从最短路径到网络流,五大核心算法解析与应用 图论是计算机科学中用于研究事物间关系的基础模型,它将复杂系统抽象为由顶点和边构成的网络。其核心原理在于通过数学方法描述和优化连接、路径与流量问题。掌握图模型对于解决现实世界中的关联性难题具有重要技术价值,例如在社交网络分析、物流路径规划、通信数据传输等场景中,它都能提供关键的建模与优化思路。本文聚焦于图论在工程实践中的高频应用,深入剖析最短路、最小生成树、网络流、匹配及关键路径五大核心模型。针对最短路径问题,详细对比了Dijkstra、Floyd和A*等算法的适用场景与实现要点;对于资源传输优化,则探讨了网 阅读详情

相关推荐

【信息科学与工程学】【通信工程】第十八篇 企业网、园区网、数据中心、广域网各类业务网络02

模型类别基本假设网络表示耦合函数渗透方程临界条件物理意义一对一依赖​每个交通节点与一个通信节点相互依赖双层网络:交通层G_T=(V_T,E_T),通信层G_C=(V_C,E_C),层间一一对应边E_I依赖函数:RT​=fT​(RC​,p),RC​=fC​(RT​,p)自洽方程: RT​=p[1−GT​0(1−RT​)][1−GC​0(1−RC​)] RC​=p[1−GC​0(1−RC​)][1−GT​0(1−RT​)]pc​=⟨kT2​⟩⟨kC2​⟩​1​ ⟨k²⟩=⟨k(k-1)⟩对称耦

weixin_49199313的博客 1142

每日一题(二十):最小生成树

Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。   Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( &lt; 100 );随后的N(N-...

老肥码码码 664

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 454

还是畅通工程(prim+kruskal最小生成树)

题目连接: 还是畅通工程 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对...

Fau的博客 1053

CTF命令执行绕过实战:从空格过滤到无回显外带的7种核心姿势

命令执行漏洞是Web安全中的常见高危漏洞,其核心原理在于应用程序未对用户输入进行充分过滤,导致攻击者能够注入并执行系统命令。在真实环境中,安全防护措施(如WAF、输入过滤函数)普遍存在,因此漏洞利用的关键技术在于“绕过”这些过滤机制。理解过滤器的运作逻辑(如黑名单、白名单、转义、长度限制)是成功绕过的前提。通过系统学习**空格绕过**、**命令黑名单绕过**、**编码混淆**等基础技巧,并结合**无回显外带**、**反弹Shell**等高级利用链,安全研究人员能够有效应对复杂防护场景。本文以CTFshow

weixin_29315091的博客 370

使用mixamo导入人物动作到unity

导入的材质是withoutSkin时选择Create From Other Model + 选择带withSkin里的。方案二:Textures选择Extract Textures,将文件存放到喜欢的位置(不行继续方案三)2.动画没有动:开个Animation窗口,选择人物的Prefab(Hierachy),查看窗口左侧。方案三:选中素材自带或者导出的Material,接着方案一选择 选中的materials进行转化。选 withSkin,剩下的动作选without Skin)(角色发生位移时出现选项)

big_good_boy的博客 1635

prim算法详解+例题 --还是畅通工程

Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( &lt; 100 );随后的N(N-1)/2...

qq_41886231的博客 1250

基于matlab的车牌识别(含子程序)

基于matlab的车牌识别系统一、对车辆图像进行预处理1.载入车牌图像:function [d]=main(jpg) [filename, pathname] = uigetfile({'*.jpg', 'JPEG 文件(*.jpg)'}); if(filename == 0), return, end global FILENAME %定义全局变量 FILENAME = [pathname f...

TuTu998的博客 4万+

畅通问题

Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 当N为0时

qq_43742497的博客 562

多重共线性问题 -- 岭回归方法

概述 本篇博客分为三大部分,线性模型、多重共线性问题和岭回归。其中,线性模型中介绍了线性模型定义和普通最小二乘法对线性模型的拟合。第二部分,借由1987-2007年的人口、消费和科技对碳排放的影响的数据来说明多重共线性问题(包括如何从定性和定量两个方面判断多重共线性问题)和多重共线性问题对普通最小二乘估计的影响。第三部分,使用岭回归对第二部分中的多重共线性问题进行拟合,并基于R2R^2R2决定系数...

楚江客的记录 1万+

linux 内核OOM问题定位-SLAB_DEBUG

首先看slabinfo按的size排序查看 slub object,可以查看 space 总占用大小,及objects个数判断泄漏点 为kmalloc-128。那个泄露多看/sys/kernel/debug的slab/kmalloc*-的alloc-traces和free-traces。SLAB或者SLUB有一个用就可以,改menuconfig没有clean会覆盖之前的更改,现在看一下编译的过程。或者配置defconfig,配置完之后需要clean后再编译。1,配置menuconfig。

陌上花开缓缓归以的博客 899

还是畅通工程(HDU 1233)---最小生成树模板题(Prim和Kruskal)

题目链接 题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 输入格式 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的...

weixin_43960284的博客 488

FPGA+CUYSB3014实现USB3.0功能

CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器,可以解决USB2.0带宽限制,或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3,具有高度的灵活特性,开发人员只需要下载FX3的固件库,就能使用USB3.0的功能。目前在一些电子产品中,使用主控器加PHY芯片最流行的方式是用FPGA+FX3这种搭配来实现USB3.0接口。......

D_Katter的博客 7065

HDOJ 1233:还是畅通工程

题目大意:某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 解题思路:求最小公路总长度,先将已给的道路根据距离进行从小到大排序,再从最小的公路总长度开始,判断该路连接的两条是否已经连接上,即判断这两条路是否独立,如果是,连接这条路,将这条路的距离加入总长度中,如果不是,继续寻找下一条长度最短的路,直到连接的路的数目等于

m0_61223040的博客 259

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

算法笔记---问题 A: 还是畅通工程

题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 输入 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正...

、思考致富的博客 483

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

专题四 第四道题

1.题目编号:1004 2.简单题意:某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 3.解题思路形成过程:这道题是一个求最小生成树的题目,但是每次输入的是两边的点和权,这次更加简便,用Kruskal算法

慧吖的博客 1024

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

还是畅通工程(并查集+贪心)

#include <cstdio> #include <cmath> #include<iostream> #include<algorithm> using namespace std; int f[1005]; struct node { int x, y, z; }D[1005]; bool cmp(node a, node b) { r...

Chien d'amis的博客 399

杭电oj 1102

/*题目描述: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路 交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 输入: 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数, 分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 当N为0时,输入结

qq_44709805的博客 512

HDU - 1233 还是畅通工程(最小生成树入门)

还是畅通工程 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的...

Than-的博客 536

解题思考(并查集)畅通工程

并查集基本思想框架,使用数组bin[n]对于每一个地点进行标记性质编号,如果ABC三个城市可被串联,则他们的bin[A,B,C]都相同; 两个函数findx与merge:findx向上层层找出bin[],merge合并:将二者得bin[]改为相同。 findx函数: int findx(int x) { int r=x; while(bin[r]!=r) r=bin[r]; return r; } merge函数: void merge(int x,int y) { int fx,

pied_piperG的博客 737

HDU 1233 最小生成树模板题,练练模板

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 71235Accepted Submission(s): 32197 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两...

日拱一卒,功不唐捐 2836

畅通工程——计算最小公路长度(最小生成树)

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对...

red_red_red的博客 1347

还是畅通工程||HDU1233

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input测试输入包含

csdn_muxin的博客 837

Problem D

Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。   Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 当N为0时,输入结束,该用

tansanity的博客 344

1005 Problem E

题意:某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。计算最小的公路总长度。 思路:求连通所有村庄的最小公路总长度,即求最小生成树问题,利用prim算法,将村庄看做一个图,求最小生成树。题目中相比上一题,增加了一个状态,对于已经修好

diyutianxie的博客 323
上一篇: 图论总结(欧拉路+Floyd所有结点最短+Bellman-Ford算法+SPFA+Dijsktra算法+Tarjan算法+最小生成树(prim+kruskal) )
下一篇: 最小生成树-kruskal算法
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值