hduoj-1874 畅通工程续(Dijistra + Floyd + Bellman_Ford + SPFA)

最大权二分匹配—KM算法入门 && 模板 最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大。解决这个问题可以用KM算法。理解KM算法需要首先理解“可行顶标”的概念。可行顶标是指关于二分图两边的每个点的一个值lx[i]或ly[j],保证对于每条边w[i][j]都有lx[i]+ly[j]-w[i][j]>=0。如果所有满足lx[i]+ly[j]==w[i][j]的边组成的导出子图中存在一个完美匹配,那么这个 阅读详情

畅通工程续

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 23439    Accepted Submission(s): 8253


Problem Description
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
 

Input
本题目包含多组数据,请处理到文件结束。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
 

Output
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.
 

Sample Input
3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
 

Sample Output
2 -1
 


Dijistra (15ms):
#include <stdio.h>
#include <string.h>
#include <vector>
#define N 220

using namespace std;

struct Road{
	int next;
	int dis;
};

vector<Road>City[N];
int CityNum, RoadNum;
int dij[N];
bool vis[N];

void Init(){
	memset(vis, 0, sizeof(vis));
	for(int i = 0; i <= CityNum; i ++){
		City[i].clear();
		dij[i] = 0xfffffff;
	}
}
void Dijistra(int cur){
	dij[cur] = 0;
	while(vis[cur] == 0){
		vis[cur] = 1;
		for(int i = 0; i < City[cur].size(); i ++){
			int next = City[cur].at(i).next;
			int dis = City[cur].at(i).dis;
			if(dij[next] > dij[cur] + dis){
				dij[next] = dij[cur] + dis;
			}
		}
		int min = 0xfffffff;
		for(int i = 0; i < CityNum; i ++){
			if(!vis[i] && min > dij[i]){
				min = dij[i];
				cur = i;
			}
		}
	}
}

int main()
{
	Road nw;
	while(scanf("%d%d", &CityNum, &RoadNum) != EOF){
		Init();
		int start, end, distance;
		for(int i = 0; i < RoadNum; i ++){
			scanf("%d%d%d", &start, &end, &distance);
			nw.next = start;
			nw.dis = distance;
			City[end].push_back(nw);
			nw.next = end;
			City[start].push_back(nw);			
		}
		scanf("%d%d", &start, &end);
		
		Dijistra(start);
		
		if(dij[end] == 0xfffffff){
			printf("-1\n");
		}
		else{
			printf("%d\n", dij[end]);
		}
	}
	
	return 0;
}


Floyd (78ms):
#include <stdio.h>
#include <algorithm>
#define N 205

using namespace std;

int map[N][N];
int CityNum, RoadNum;

int floyd(int start, int end){
    for(int k = 0; k < CityNum; k ++){
        for(int i = 0; i < CityNum; i ++){
            for(int j = 0; j < CityNum; j ++){
                map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
            }
        }
    }
    
    return map[start][end] < 0xfffffff ? map[start][end] : -1;
}

int main()
{
    int start, end, len;
    while(scanf("%d%d", &CityNum, &RoadNum) != EOF){
        for(int i = 0; i < CityNum; i ++){
            for(int j = 0; j < CityNum; j ++){
                map[i][j] = (i == j ? 0 : 0xfffffff);
            }
        }
            
        for(int i = 0; i < RoadNum; i ++){
            scanf("%d%d%d", &start, &end, &len);
            if(len < map[start][end]){				// 注使用邻接矩阵时 需判断重连 
				map[end][start] = map[start][end] = len;		// 无向图 
			}
        }
        scanf("%d%d", &start, &end);
        
        int ans = floyd(start, end);
        
        printf("%d\n", ans);
    }
    
    return 0;
}

Bellman_Ford(15ms):
#include <stdio.h>

struct ROAD{
	int from;
	int to;
	int len;
};

ROAD Road[2020];
int CityNum, RoadNum;
int dis[220];

void Bellman_Ford(int start){
	for(int i = 0; i < CityNum; i ++){
		dis[i] = 0xfffffff;
	}
	dis[start] = 0;
	for(int i = 0; i < CityNum; i ++){
		for(int j = 0; j < RoadNum * 2; j ++){
			if(dis[Road[j].to] > dis[Road[j].from] + Road[j].len){
				dis[Road[j].to] = dis[Road[j].from] + Road[j].len;
			}
		}
	}
}

int main()
{
	int start, end;
	while(scanf("%d%d", &CityNum, &RoadNum) != EOF){
		for(int i = 0; i < RoadNum; i ++){
			scanf("%d%d%d", &Road[i].from, &Road[i].to, &Road[i].len);
			Road[RoadNum + i].from = Road[i].to;
			Road[RoadNum + i].to = Road[i].from;
			Road[RoadNum + i].len = Road[i].len;
		}
		scanf("%d%d", &start, &end);
		
		Bellman_Ford(start);
		
		if(dis[end] == 0xfffffff){
			printf("-1\n");
		}
		else{
			printf("%d\n", dis[end]);
		}
	}
	
	return 0;
}

SPFA (0ms):
#include <stdio.h>
#include <string.h>
#include <queue>
#define N 220

using namespace std;

int CityNum, RoadNum;
int map[N][N], dis[N];
bool vis[N];

void Init(){
	memset(vis, 0, sizeof(vis));
	for(int i = 0; i < CityNum; i ++){
		dis[i] = 0xfffffff;
		for(int j = 0; j < CityNum; j ++){
			map[i][j] = 0xfffffff;
		}
	}
}

void SPFA(int start){
	queue<int>q;
	q.push(start);
	dis[start] = 0;
	while(!q.empty()){
		int cur = q.front();
		q.pop();
		vis[cur] = 0;
		
		for(int i = 0; i < CityNum; i ++){
			if(dis[i] > map[cur][i] + dis[cur]){
				dis[i] = map[cur][i] + dis[cur];
				if(!vis[i]){
					q.push(i);
					vis[i] = 1;
				}
			}
		}
	}	
}

int main()
{
	int start, end, len;
	while(scanf("%d%d", &CityNum, & RoadNum) != EOF){
		Init();
		for(int i = 0; i < RoadNum; i ++){
			scanf("%d%d%d", &start, &end, &len);
			if(map[start][end] > len){
				map[start][end] = map[end][start] = len;
			}
		}
		scanf("%d%d", &start, &end);
		
		SPFA(start);
		
		if(dis[end] == 0xfffffff){
			printf("-1\n");
		}
		else{
			printf("%d\n", dis[end]);
		}
	}
	
	return 0;
}


图论基础:从七桥问题到现代网络结构的数学语言 图论以点与边的抽象模型揭示现实世界中复杂关系的本质。从欧拉解决七桥问题出发,发展出度数、连通性、同构等核心概念,并通过邻接矩阵实现计算机化处理。其应用涵盖社交网络距离计算、死锁检测、资源分配优化及最小覆盖选址等。关键定理如握手定理、矩阵幂表示路径数,以及独立集与覆盖集的互补关系,构建了从理论到实践的完整体系。掌握图论,即掌握了理解与优化现代信息系统的底层逻辑。 阅读详情

相关推荐

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5007

HDU 1847 畅通工程续

Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input 本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和

千里之行 始于足下 469

近几年预训练语音大模型汇总

语音大模型研究近年来取得显著进展,主要包括wav2vec 2.0(2020)、HuBERT(2021)、WavLM(2022)、Data2Vec(2022)、Whisper(2023)等代表性工作。这些模型采用自监督学习框架,通过掩码预测、对比学习等策略在大规模语音数据上预训练,可有效应用于语音识别、情感分析、疾病检测等下游任务。其中wav2vec 2.0首次将对比学习引入语音领域,Whisper通过68万小时弱监督数据实现强大的跨语言能力。这些突破为低资源语音任务提供了通用特征提取方案,推动了医疗语音分析

victory0431的博客 1780

1874 畅通工程续 模板题 Dijkstra算法 Bellman_Ford算法

<br />Dijkstra<br /> <br />#include<stdio.h> #define N 201 #define INF 0x7ffffff int map[N][N]; int mark[N]; int path[N]; int n; void Dij(int start) { int i,j,min,k,dis; for (i=0;i<n;i++) { path[i]=map[start][i]; ma

phoenix13suns的专栏 452

博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构

本文深入解析了博通PEX89000 PCIe 5.0交换芯片如何为AI集群构建高效的GPU互联架构。该芯片通过提供高带宽、低延迟的PCIe 5.0交换能力,打破传统GPU通信的带宽瓶颈,并支持多主机共享、资源池化及软件定义拓扑,从而显著提升大规模AI训练与推理任务的效率与资源利用率。

weixin_29214559的博客 411

CATIA二次开发——遍历几何图形集下的轴系及控制轴系生成位置

CATIA二次开发——轴系相关问题1.遍历几何图形集下的轴系2.解决轴系生成位置的问题 1.遍历几何图形集下的轴系 近期遇到的问题:遍历轴系的时候发现,AxisSystem属性的轴系只有放在轴系集合下,才能被找到,放在几何图形集或其他位置均不能被找到。本来想遍历几何图形集下的轴系元素,但是发现没有对应的属性,只能查找 几何图形集、几何元素、草图等元素,无法直接遍历轴系。 解决办法:(加入选择集,在选择集中筛选轴系类型) HybridBody axisHB = activePart.HybridBodies

WorkMan的博客 2731

[最短路径] HDU 1874 - 畅通工程续

最短路径简单题,用Dijkstra做的。 需要注意的地方: 1、输入中的两点之间的距离,可能存在重边,要选取最小的距离。 2、当S和T相等时,输出0。 #include #include #include #include #include #include #include #include #include #include #include #include

Freeway的博客 825

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码)

uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd

✅ 精选推荐文章 1万+

QDUOJ-16 分糖果(图论, 广搜)

Problem 16: 分糖果 Time Limit:1 Ms| Memory Limit:128 KB Difficulty:1 Description 童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由

狂飙的蜗牛 的专栏 3550

YOLO26改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏已更新260多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手

Limiiiing的博客 6382

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1822

NYOJ-42 一笔画问题(图论,深搜)

一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入第一行只有一个正整数N(N 每组测试数据的第一行有两个正整数P,Q(P 随后的Q行,每行有

狂飙的蜗牛 的专栏 1569

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

nyoj-239 月老的难题 (二分图匹配—匈牙利算法 && 网络流—Dinic算法)

月老的难题 二分图匹配-匈牙利算法,网络流-Dinic算法,模板题 描述 月老准备给n个女孩与n个男孩牵红线,成就一对对美好的姻缘。 现在,由于一些原因,部分男孩与女孩可能结成幸福的一家,部分可能不会结成幸福的家庭。 现在已知哪些男孩与哪些女孩如果结婚的话,可以结成幸福的家庭,月老准备促成尽可能多的幸福家庭,请你帮他找出最多可能促成的幸福

狂飙的蜗牛 的专栏 1545

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NYOJ-38 布线问题(图论,最小生成树,Prime)

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入第一行是一个整数n表示有n组测试数据。(n 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v 随后

狂飙的蜗牛 的专栏 1446

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ-2195 Going Home (最小费用最大流初学 && 最大权二分匹配—KM算法)

Going Home 最小费用最大流 && 最大权二分匹配,两种解法 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16870   Accepted: 8636 Description On a grid map there are n little men and n houses. In each unit

狂飙的蜗牛 的专栏 1435

特殊“邻接表”建图方法

(此文借鉴 dollarzhaole 的 《邻接表建图方法及代码》 ) 说明:         建立无向图;         第一行输入n 表示边数; 输入示例:  5  3 4 6  3 7 8  1 3 6  2 4 7  3 5 1 图示例:                 方法:         利用数组和结构体模拟边与边的关系, 极大的节省空间和时

狂飙的蜗牛 的专栏 1265

hduoj-1233 还是畅通工程(Prim + Kruskal)

最小生成树Prim,Kruskal模版题.

狂飙的蜗牛 的专栏 1064

POJ-1094 Sorting it all out (拓扑排序)

Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26070   Accepted: 9031 Description An ascending sorted sequence of distinct values is one

狂飙的蜗牛 的专栏 994

NYOJ-510 昂贵的聘礼(图论)

昂贵的聘礼 时间限制:1000 ms  |  内存限制:10000 KB 难度:4 描述      年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水

狂飙的蜗牛 的专栏 972

Poj-2249 Remmarguts' Date (K短路)

Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19745   Accepted: 5374 Description "Good man never makes girls wait or breaks an appointment

狂飙的蜗牛 的专栏 885

POJ 1273 Drainage Ditches (网络流 EK && Dinic)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53153   Accepted: 20238 Description Every time it rains on Farmer John's fields, a pond form

狂飙的蜗牛 的专栏 873

最小生成树--Kruskal

Kruskal 代码模板 基本思路:         新手初学,使用优先队列,免去排序;并查集判环,过程中进行了路径压缩,以提高效率; 然后贪心建立最小生成树, min为最小权值;         算法演示: http://sjjg.js.zwu.edu.cn/SFXX/sf1/kruskal.html         另外,同为最小生成树的Prime算法和Kruskal算法的适用

狂飙的蜗牛 的专栏 824

图论--最短路径(Dijkstra, Bellman-Ford)

最短路径

x13262608581的博客 278

图论--存储,转置,拓扑排序

邻接表,矩阵,转置,拓扑排序

x13262608581的博客 214
上一篇: nyoj-17 单调递增最长子序列(灵活应对)
下一篇: hduoj-1233 还是畅通工程(Prim + Kruskal)
tbl00c
博客等级 码龄13年 21粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值