首页 > 编程语言 >【模板】朱刘算法

【模板】朱刘算法

时间:2024-11-21 22:18:23浏览次数:1  
标签:std pre int tn 算法 模板

【模板】朱刘算法

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+2;

int root,n,m;

struct Edge {
	int u,v,w;
}e[N];

int id[N],vis[N],pre[N],incost[N];

void zhuliu() {
	int tn=0;
	int res=0;
	while(1) 
	{
		tn=0;
		for(int i=1;i<=n;i++) {
			id[i]=vis[i]=-1;
			incost[i]=INT_MAX;
		}
		
		for(int i=1;i<=m;i++) {
			int u,v;
			u=e[i].u; v=e[i].v;
			if(u!=v && e[i].w<incost[v]) {
				incost[v]=e[i].w;
				pre[v]=u;
			}
		}
		
		for(int i=1;i<=n;i++) {
			if(i!=root && incost[i]==INT_MAX)
			{
				printf("NO");
				return ;
			}
		}
		
		incost[root]=0;
		for(int i=1;i<=n;i++) {
			res+=incost[i];
			int v=i;
			while(vis[v]!=i && id[v]==-1 && v!=root)
			{
				vis[v]=i;
				v=pre[v];
			}
			if(id[v]==-1 && v!=root) {
				tn++;
				int u=i;
				do {
					id[u]=tn;
					u=pre[u];
				} while(u!=v);
			}
		}
		
		if(!tn) {
			printf("YES %d",res);
			return ;
		}
		for(int i=1;i<=n;i++) {
			if(id[i]==-1) {
				id[i]=++tn;
			}
		}
		
		int i=1;
		while(i<=m) 
		{
			int vv=e[i].v;
			e[i].u=id[e[i].u];
			e[i].v=id[e[i].v];
			if(e[i].u!=e[i].v) {
				e[i].w-=incost[vv];
				i++;
			}
			else {
				swap(e[i],e[m--]);
			}
		}
		root=id[root];
		n=tn;
	}
}

int main() {
	
	return 0;
}

标签:std,pre,int,tn,算法,模板
From: https://www.cnblogs.com/UeesugiSakura/p/18561686

相关文章

  • 【机器学习】解锁AI密码:神经网络算法详解与前沿探索
    ......
  • 模板
    数据结构线段树2voidbuild(intp,intl,intr){ l(p)=l,r(p)=r; if(l==r)return; intmid=l+r>>1; build(ls(p)=p<<1,l,mid),build(rs(p)=p<<1|1,mid+1,r);}voidpushdown(intp){ sum(ls(p))=(sum(ls(p))*mul(p)+add(p......
  • vxe-grid 自定义插槽模板
    在vxe-table中使用vxe-grid渲染表格,当配置式不能满足需求时,。需要使用自定义插槽模板来自定义业务需求,实现更灵活的功能。vxe-grid支持多种自定义方式,可以使用插槽模板,也可以使用插槽来自定义模板。自定义单元格模板<template><div><vxe-gridv-bind="gridOptions......
  • 多目标优化算法:多目标伞蜥优化算法Multi-objective Frilled Lizard Optimization求解D
    一、伞蜥优化算法伞蜥优化算法(FrilledLizardOptimization,FLO)是2024年提出的一种新颖的元启发式算法,它模仿了伞蜥在其自然栖息地中独特的狩猎行为。该算法的核心原则被详细地描述并数学结构化为两个不同的阶段:(i)探索阶段,模仿蜥蜴对猎物的突然攻击;(ii)开发阶段,模拟蜥......
  • 【wx小程序开发】模板调用 data 里的函数
    微信小程序glass-easel组件框架新增特性中支持在模板中调用data里的函数。如果data中的某个字段是函数,在模板里可以直接调用它:Component({data:{getDataField(){return'someValue'},},})<view>{{getDataField()}}</view>尽管这样做有时会......
  • 代码随想录算法训练营day52 day53| 卡码网101.孤岛的总面积 102.沉没孤岛 103.水
    学习资料:https://www.programmercarl.com/kamacoder/0101.孤岛的总面积.html#思路邻接矩阵是否被遍历过;每个坐标点上的值为0、1、2等等;四个边的考虑;地图的遍历次数都是卡码网的题学习记录:101.孤岛的总面积点击查看代码#用深搜,遍历邻接矩阵的四个边,先遍历所有可遍历的岛屿,......
  • Python算法模版——并查集
        并查集常用于与图或树相关的算法题中,一个最为经典应用场景是求无向图的连通分量,为方便大家使用并查集算法,这里为大家提供一个Python的并查集算法模版,并加有详细注释。classUnionFind:def__init__(self,n):#n代表总共有n个节点,初始时每个节点以......
  • PID 控制算法 | 模糊控制 | 控制规则
    注:本文为几位功夫博主关于PID控制算法的几篇合辑。知识点交集未去重,如有内容异常请看原文。控制算法(一)——PID控制算法fxfreefly于2020-03-1717:25:43发布比例积分微分控制,简称PID控制,其中P表示比例、I表示积分、D表示微分。PID控制算法是最早发展起来......
  • 无人机无刷电机核心算法!
    一、无人机无刷电机核心技术电磁感应与换向技术无刷电机的工作原理基于电磁感应和换向技术,通过电子换向器(即电子调速器,ESC)控制定子上的多相电流,产生旋转磁场,驱动转子中的永磁体转动,从而避免了机械磨损和摩擦,提高了电机寿命和效率。电机类型与设计无刷电机根据其设计和用途......
  • 排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)
    对数组进行排序,主要演示选择排序、直接排序、冒泡排序、二路归并排序算法,附上代码演示一、编写好各类排序方法的函数(1)s_sort(inte[],intn):选择排序。(2)si_sort(inte[],intn):直接插人排序。(3)sb_sort(inte[],intn):冒泡排序。(4)merge(inte[],intn);二路归并排序......