COGS NIOP联赛 图论相关算法总结
最小生成树
Kruskal+ufs
int ufs(int x) {
return f[x] == x ? x : f[x] = ufs(f[x]);
}
int Kruskal() {
int w = 0;
for(int i=0; i<n; i++)
f[i] = i;
sort(e, e+n);
for(int i=0; i<n; i++) {
int x = ufs(e[i].u), y = ufs(e[i].v);
if(x != y) {
f[x] = y;
w += e[i].w;
}
} return w;
}
Prim
int Prim() {
int w = 0;
priority_queue<pair<int, int> > q;
bool l[N] = {0};
l[1] = 1; q.push(make_pair(0, 1));
for(int k=1; k<n; k++) {
int u = q.top().second; q.pop();
for(int i=0; i<G[u].size(); i++)
if(!l[G[u][i]])
q.push(make_pair(-c[u][i], G[u][i]));
while(!q.empty() && l[q.top().second])
q.pop();
l[q.top().second] = 1;
w += -q.top().first;
q.pop();
} return w;
}
最短路径
Dijkstra+priority_queue
void Dijkstra(int s) {
priority_queue<pair<int, int> > q;
bool l[N] = {0}; l[s] = 1;
fill_n(f, n, INF); f[s] = 0;
q.push(make_pair(-f[s], s));
while(!q.empty()) {
int u = q.front().second; q.pop();
for(int i=0; i<G[u].size(); i++) {
int v = G[u][i];
if(f[v] > f[u] + c[u][i]) {
f[v] = f[u] + c[u][i];
if(!l[v]) {
l[v] = 1;
q.push(make_pair(-f[v], v));
}
}
}
}
}
Bellman-Ford (SPFA)
void BellmanFord(int s) { // SPFA
queue<int> q;
bool l[N] = {0}; l[s] = 1;
fill_n(f, n, INF); f[s] = 0;
q.push(s);
while(!q.empty()) {
int u = q.front(); q.pop();
l[u] = 0;
for(int i=0; i<G[u].size(); i++) {
int v = G[u][i];
if(f[v] > f[u] + c[u][i]) {
f[v] = f[u] + c[u][i];
if(!l[v]) {
l[v] = 1;
q.push(v);
}
}
}
}
}
Floyd
void Floyd() {
for(int k=0; k<n; k++)
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
}
二分图
ufs 验证
Hungary
bool DFS(int u) {
for(int i=0; i<G[u].size(); i++) {
int v = G[u][i];
if(!l[v]) {
l[v] = 1;
if(!f[v] || DFS(f[v])) {
f[v] = u;
return true;
}
}
} return false;
}
int Hungary() {
int w = 0;
for(int i=0; i<n; i++) {
fill_n(l, l+n, 0);
if(DFS(i))
w++;
} return w;
}
连通分量
Tarjan
stack<int> s;
void Tarjan(int u) {
dfn[u] = low[u] = ++time;
l[u] = 1;
s.push(u);
for(int i=0; i<G[u].size(); i++) {
int v = G[u][i];
if(!dfn[v]) {
Tarjan(v);
low[u] = min(low[u], low[v]);
} else if(l[v])
low[u] = min(low[u], dfn[v]);
}
if(dfn[u] == low[u]) {
w++;
do {int v;
l[v = s.top()] = 0;
f[v] = w;
s.pop();
} while(u != v);
}
}
void SCC() {
fill_n(dfn, n, 0);
for(int i=0; i<n; i++)
if(!dfn(i))
Tarjan(i);
}
*网络流
最大流:Edmonds-Karp
费用流:Bellman-Ford 找增广路,或者用贪心求解
COGS NIOP联赛 图论相关算法总结的更多相关文章
- [联赛可能考到]图论相关算法——COGS——联赛试题预测
COGS图论相关算法 最小生成树 Kruskal+ufs int ufs(int x) { return f[x] == x ? x : f[x] = ufs(f[x]); } int Kruskal ...
- 二叉树-你必须要懂!(二叉树相关算法实现-iOS)
这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
- [java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)
内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次m ...
- 【STL学习】堆相关算法详解与C++编程实现(Heap)
转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介 堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...
- TCP系列39—拥塞控制—2、拥塞相关算法及基础知识
一.拥塞控制的相关算法 早期的TCP协议只有基于窗口的流控(flow control)机制而没有拥塞控制机制,因而易导致网络拥塞.1988年Jacobson针对TCP在网络拥塞控制方面的不足,提出了& ...
- UCI机器学习库和一些相关算法(转载)
UCI机器学习库和一些相关算法 各种机器学习任务的顶级结果(论文)汇总 https://github.com//RedditSota/state-of-the-art-result-for-machi ...
- 采样方法(二)MCMC相关算法介绍及代码实现
采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循CC 4 ...
- 盘点十大GIS相关算法
1.道格拉斯-普克算法(Douglas–Peucker) 道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲 ...
随机推荐
- C语言复习---用筛选法求100之内的素数
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int i, j; ] ...
- POJ - 1753 Flip Game(状压枚举)
https://vjudge.net/problem/POJ-1753 题意 4*4的棋盘,翻转其中的一个棋子,会带动邻接的棋子一起动.现要求把所有棋子都翻成同一种颜色,问最少需要几步. 分析 同一个 ...
- 解决tomcat下面部署多个项目log4j的日志输出会集中输出到一个项目中的问题
在一次项目上线后,发现了一个奇怪的问题,经过对源码的阅读调试终于解决,具体经过是这样的: 问题描述:tomcat7下面部署多个项目,log4j的日志输出会集中输出到一个项目中,就算配置了日志文件的绝对 ...
- 分布式文件系统 之 数据块(Block)
众所周知,HDFS中以数据块(block)为单位进行存储管理.本文简单介绍一下HDFS中数据块(block)的概念,以及众多分布式存储系统(不止是HDFS)使用block作为存储管理基本单位的意义. ...
- CSUST 1506 ZZ的计算器 模拟题
题目描述:实现一个计算器,可以进行任意步的整数以内的加减乘除运算,运算符号只有+.-.*./,求出结果. 解题报告:一个可以说麻烦的模拟题,我们可以这样,输入以字符串的形式输入,然后将输入先做一遍预处 ...
- c++刷题(30/100)
题目一:合并两个排序的链表 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路:利用两个指针cur1,cur2来指分别向两个链表中当前较小的和当前较大的 ...
- 洛谷 P1478 陶陶摘苹果(升级版)
本萌新第一次发布题解,若有不严谨处请谅解. 我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的.它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小. 我们看到题目下面的说明:xi< ...
- 2016最新的中国省市区三级数据库表.sql mssql
/****** Object: Table [dbo].[t_Area] Script Date: 09/10/2016 09:35:46 ******/ SET ANSI_NULLS ON GO S ...
- python学习之——import sys模块
(1)sys.argv sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突.另外,它也清晰地表明了这个名称是sy ...
- nagios报警延迟的解决--flapping state
这个问题是在测试中发现的.因为要在服务器上布置nagios用来监控oracle,可是发现手动shutdown数据库后能够很快报警,但是再startup后就不是很及时,有时会延迟很久.经过研究发现了这个 ...