ACM 图
文章平均质量分 78
穿袜子的流氓兔
这个作者很懒,什么都没留下…
展开
-
极大团和最大团
查来很多资料才终于懂了极大团和最大团的概念。由于网上介绍的不多,且较为死板,特意整理如下:团:表示N 个点的集合,这N个点彼此两两连接,既有N(N-1)/2条边。极大团: 表示无法是其他团的子团。最大团:点最多的极大团.求极大团的个数(poj 2989)#include #include#include#includeusing namespace std;#原创 2014-03-28 18:43:56 · 3137 阅读 · 0 评论 -
最小生成树 prim kruscal
prim算法:#include #include #include #define MAX 0x7fffffffusing namespace std;int dis[200][200],vis[200],low[200],n,m;int prim(){ int i,j,sum=0,pos=1; memset(vis,0,sizeof(vis)); vis原创 2014-03-26 19:55:03 · 822 阅读 · 0 评论 -
有向图的最短路径
#include #include #define N 505#define MAX 1000000int n,m,dis[N][N],vis[N],dp[N];void dfs(int e){int i; vis[e]=1; for(i=1; i<=n; i++) if(dis[e][i]!=0&&!vis[i]) dfs(i原创 2014-03-26 19:58:33 · 639 阅读 · 0 评论 -
Dijkstr 最短路径算法
Dijkstr 最短路径算法:#include #include #include #include #include #define MAX 10000using namespace std;int n,m,s,e,vis[100],low[100],dis[210][210];int dijkstra(){ int i,min; int pos=s;原创 2014-03-26 19:57:08 · 871 阅读 · 0 评论 -
最大匹配(匈牙利算法)
/*【KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j, W),称为可行边;(2)KM 算法的核心思想就是通过修改某些点的标号(但要满足点标始终是可行的),不断增加图中的可行边总数,直原创 2014-03-26 21:02:45 · 740 阅读 · 0 评论 -
有向图的最小生成树
#include #include #include #include #define N 105#define MAX 0x7fffffffusing namespace std;struct point{ double x,y;} p[N];struct node{ int u,v; double w;} edge[N*N];int pre[N原创 2014-03-26 20:31:36 · 823 阅读 · 0 评论 -
并查集(两个优化—按秩合并、路径压缩) poj2492
并查集有两个优化。一、按秩合并描述:就是在对两个不同子集连接时,按照rank来连,也就是rank低的连在rank高的下面。rank高的做父亲节点。作用,这样类似维护了一棵树,树是rank高的在上。二、路径压缩描述:假如fa数组已经嵌套了N层,那么传统的做法去找祖先要做N次,当N很大时,这种做法很没效率。这是朴素查找的代码,适合数据量不大的情况:int findx(i原创 2014-04-20 23:00:53 · 1972 阅读 · 0 评论 -
最优比例生成树
题目链接:http://poj.org/problem?id=2728题目大意:有n个点,每个点(x,y,h),x,y表示这个点的坐标,h表示这个点的高度。对于任意两个点存在这样两个数据,height:高度差,len:欧几里得距离。求把n个点连起来,试任意两个点联通,且,所有边的高度差之和除以距离和值最小。思路:二分。#include#include#include原创 2014-03-30 12:30:36 · 718 阅读 · 0 评论 -
有向图求完全遍历顺序(DFS暴力)--------zoj3332
这题点的个数(#include #include #include #define N 102using namespace std;int T,n,cnt;int dis[N][N],vis[N];int pm[N];void init(){ memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis));原创 2014-03-02 15:54:32 · 1554 阅读 · 0 评论 -
判弦图
先来明确一些定义.弦:连接环中不相邻的两个点的边。弦图:一个无向图成为弦图,当图中任意长度大于3的环都至少有一个弦。单纯点:设N(V)表示与点V相邻的点集。一个点称为单纯点当V点和N(V)的诱导子图为一个团。完美消除序列:一个点的序列(每个点出现且恰好出现一次)v1,v2,……,vn满足vi在{Vi,Vi+1,……,Vn}的诱导子图中为一个单纯点。判弦图模板:/******原创 2014-03-28 19:31:52 · 709 阅读 · 0 评论 -
强联通分量 缩点 tarjan算法
/*做一遍DFS,用dfn[i]表示编号为i的节点在DFS过程中的访问序号(也可以叫做开始时间)用low[i]表示i节点DFS过程中i的下方节点所能到达的开始时间最早的节点的开始时间。初始时dfn[i]=low[i]在DFS过程中会形成一搜索树。在搜索树上越先遍历到的节点,显然dfn的值就越小。DFS过程中,碰到哪个节点,就将哪个节点入栈。栈中节点只有在其所属的强连通分量已经全部求出时,才原创 2014-03-30 13:07:49 · 782 阅读 · 0 评论 -
最大流模板(Dinic, ISAP)
//Dinic 强优化 //模板题:BZOJ1838草地排水 //作者:XPC #include #include #include #include #define Min(a,b) (a<b?a:b) using namespace std;原创 2014-03-28 21:15:24 · 698 阅读 · 0 评论 -
割点
割点就是缺失这个点后,联通分支增加。/*sample in55 1 2 3 4062 1 35 4 6 200sample out12*/#include#include #define Max 0x7fffffffint n,vis[100],pre[100],low[100],kids[100],cute[100],map[100][100];//pre原创 2014-03-28 20:29:53 · 719 阅读 · 0 评论 -
拓扑排序
问题:给定几组单向边,判断是否可以拓扑排序。输入:n 全局变量,表示点数 g 全局变量,g[i]表示从点 i 连出去的边输出:返回对给定的图,是否可以拓扑排序。 L全局变量,拓扑排序的结果 #include #include #include #include #include using namespa原创 2014-05-11 14:13:38 · 830 阅读 · 0 评论