
图论
文章平均质量分 58
Wtothey
这个作者很懒,什么都没留下…
展开
-
最小度限制生成树
题目链接:http://poj.org/problem?id=1639思路:先读入所有结点,初始化并查集,kruskal算法构成几个子树,读入v0结点和与其相连的节点,排序,将几个子树连接起来,遍历v0,递归求出从cnt度到K度的生成树 ,遍历n0条出边中没用过的出边,找到差额最小添删操作。#include<cstdio>#include<iostream>#...原创 2018-08-09 15:13:22 · 313 阅读 · 0 评论 -
链式向前星与Trajan算法
模板:加边:struct node{ int to,next,w;}edge[1000];int head[1000],cnt;void add(int u,int v,int w){ ++cnt; edge[cnt].to = v; edge[cnt].next = head[u]; edge[cnt].w = w; head[u...原创 2018-08-06 10:32:18 · 380 阅读 · 0 评论 -
并查集
并查集算法(union_find sets)不支持分割一个集合,求连通子图、求最小生成树 并查集由pre[]数组和两个函数find(),join()组成,find()是寻找根节点,join()是连接两个根节点,合并路线的。 模板:初始化,建立子树我们将每一个结点的前导结点设置为自己,如果在join函数时未能形成连通,将独立成点。for(int i=0;i<1000;++i)...原创 2018-08-06 11:19:12 · 1549 阅读 · 0 评论 -
树的几个基础模板
无根树转换有根树:#include<vector>vector<int> G[1000];int u,v;for(int i=0;i<n-1;++i) //n-1条边 { scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u);}void dfs(int u,int...原创 2018-08-08 16:47:59 · 148 阅读 · 0 评论 -
初等图论【模板】
目录链式前向星拓扑序(有向图)迪杰斯特拉弗洛伊德SPFA: (单源最短路)欧拉图:链式前向星struct Edge{ int next, to; //下一条边的标号,该边的终点 Edge() {}; Edge(int next, int to): next(next), to(to) {};}edge[maxm];int head[...原创 2019-08-05 15:31:40 · 212 阅读 · 0 评论 -
Dinic【模板】
struct Edge{ int next, to; Edge(){}; Edge(int next, int to): next(next), to(to){};}edge[maxm*2];int head[maxn], W[maxn], cnt;void add(int u, int v, int w){ edge[++cnt] = Edge(head[u], v); hea...原创 2019-08-05 20:21:03 · 148 阅读 · 0 评论 -
凸包(Andrew算法)模板
Andrew算法是Graham的变种,相较Graham,其更快,数值稳定性更好。 ——《蓝书》Andrew 模板struct Node{ int x, y;}p[maxn], ch[maxn];bool cmp(Node a, Node b){ if(a.x == b.x) return a.y < b.y; return a.x <...原创 2019-08-11 17:01:05 · 318 阅读 · 0 评论