首页 > 其他分享 >最小环

最小环

时间:2023-07-27 20:11:31浏览次数:40  
标签:int 最小 long maxm inf define

目录

图论 - 最小环问题

可以利用 floyd 算法求最小环长度
floyd 算法有个性质:在最外层循环到点 k 时(尚未开始第 k 次循环),$d_{ij} $ 表示的是从 i 到 j 且仅经过编号 1 ~ k - 1 的点的最短路(即 $ \ge k $ 点的最短路尚未计算)。那么,我们设最小环中编号顶点最大的为 k ,环上与 k 相邻的两个点为 i , j,则在最外层循环枚举到 k 时,该环的长度为 $ans = d_{ij} + d_{jk} + d_{ki} $。故在循环时对于每个 k 枚举满足 i < k 且 j < K 的点对(i,j),同时更新答案即可

例题

无向图

利用floyd算法求解最小环的长度
代码

//>>>Qiansui
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x, y, sizeof(x))
#define debug(x) cout << #x << " = " << x << '\n'
#define debug2(x,y) cout << #x << " = " << x << " " << #y << " = "<< y << '\n'
//#define int long long

using namespace std;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef pair<double, double> pdd;
/*

*/
const int maxm = 1e2 + 5, inf = 5e8 + 5, mod = 998244353;
int n, m;
vector<vector<int>> g(maxm, vector<int>(maxm, inf)), c(maxm, vector<int>(maxm, inf));

void solve(){
	cin >> n >> m;
	for(int i = 0; i < m; ++ i){
		int u, v, d;
		cin >> u >> v >> d;
		c[u][v] = c[v][u] = min(c[u][v], d);
		g[u][v] = g[v][u] = min(g[u][v], d);
	}
	int ans = inf;
	for(int k = 1; k <= n; ++ k){
		for(int i = 1; i < k; ++ i){
			for(int j = i + 1; j < k; ++ j){
				ans = min(ans, g[i][j] + c[i][k] + c[k][j]);
			}
		}
		for(int i = 1; i <= n; ++ i){
			for(int j = 1; j <= n; ++ j){
				g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
			}
		}
	}
	if(ans == inf) cout << "No solution.\n";
	else cout << ans << '\n';
	return ;
}

signed main(){
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	int _ = 1;
	// cin >> _;
	while(_ --){
		solve();
	}
	return 0;
}

相关资料

标签:int,最小,long,maxm,inf,define
From: https://www.cnblogs.com/Qiansui/p/17585893.html

相关文章

  • python字典最小值
    Python字典最小值的实现方法概述在Python中,字典是一种非常有用的数据结构,它可以存储键值对,并且可以根据键来进行快速的查找。在某些情况下,我们可能需要找到字典中的最小值。本文将介绍如何使用Python实现字典最小值的功能,并提供详细的代码示例。实现步骤下面是实现字典最小值的......
  • 76. 最小覆盖子串
    给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。注意:对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。如果s中存在这样的子串,我们保证它是唯一的答案。示......
  • 还原窗口 取消最小化
    #include<Windows.h>intmain(){//获取目标窗口的句柄HWNDhWnd=FindWindow(nullptr,L"1111111");if(hWnd!=nullptr){//将窗口还原(取消最小化)ShowWindow(hWnd,SW_RESTORE);//激活窗口并将其带到前台SetForegr......
  • kmp与最小循环节
    #include<iostream>#include<string.h>#include<vector>usingnamespacestd;constintN=1e6+10,INF=0x3f3f3f3f;chars2[N];intd[N];//d[i]表示以i结尾的字符串中最大公共前后缀的长度voidinit()//得到模式串的d[]下标是从0开始的{intlen=strlen(s2);......
  • 最小环问题
    问题定义从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的解决思路在所有环中取最小值,按照集合的思路,首先对环进行分类-按照环上点的最大编号来对整个集合进行划分Floyd算法的最外层循环恰好对更新一条线路的节点编号做出了限制,假设此时外层循环......
  • Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择|附代码数据
    全文下载:http://tecdat.cn/?p=22319最近我们被客户要求撰写关于偏最小二乘法(PLS)回归的研究报告,包括一些图形和统计输出。本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估。为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方法,可以去除潜在的离群点和只......
  • openpyxl模块-----------计算最大值,最小值,平均值
    准备数据: 使用Alt= 计算出每列,每行的和,然后计算最后一列,或者最后一行的总和是437525行,10列,所以是250个元数据使用python脚本:#!/usr/bin/envpythonimportopenpyxlimportstatisticsasstatsbook=openpyxl.load_workbook('C:/Users/Administrator/Desktop/t.xlsx',dat......
  • codility算法题:找出不在数组中的最小正整数
    1.题目读题   考查点 2.解法思路 代码逻辑 具体实现解法一:publicclassSolution{publicstaticvoidmain(String[]args){System.out.println(solution(newint[]{1,3,6,4,1,2}));System.out.println(solution(newint[]{1,......
  • 11-03最小生成树
    最小生成树一、定义      在一给定的无向图G=(V,E)中,(u,v)代表连接顶点u与顶点v的边(即),而w(u,v)代表此边的权重,若存在T为E的子集且为无循环图,使得联通所有结点的的w(T)最小,则此T为G的最小生成树。w(t)=$\sum_{(u,v)∈t}$w(u,v)      最小......
  • 2780. 合法分割的最小下标
    2780.合法分割的最小下标如果元素x 在长度为m 的整数数组arr 中满足freq(x)*2>m ,那么我们称x 是支配元素 。其中 freq(x) 是x 在数组arr 中出现的次数。注意,根据这个定义,数组arr 最多 只会有一个 支配元素。给你一个下标从0 开始长度为n 的......