图论
文章平均质量分 70
LHYL
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最小生成树
模板Kruskal: 并查集+排序 (应用与稀疏图比较合适) Prim (n^2) (应用与稠密图比较合适)const int N=10000;const int inf=1000000000;bool vis[N]; int dis[N],e[N][N];int prim() { inti,j,u,v,w,ans=0; for(i=1;原创 2015-03-26 21:39:55 · 514 阅读 · 0 评论 -
次小生成树
次小生成树step 1.先用prim求出最小生成树T,在prim的同时,用一个矩阵maxd[u][v]记录 在T中连结任意两点u,v的唯一的路中权值最大的那条边的权值.这是很容易做到的,因为prim是每次增加一个结点s, 在此需要保存节点和其父节点,采用DP,则最大权值要么是新加入的边,要么是父节点到起始点的采用DP算出来的距离.u是刚加入的点,不过还没进入节点数组,v是已经存在的点m原创 2015-03-26 21:43:23 · 506 阅读 · 0 评论 -
最小树形图
最小树形图 有根的情况: 直接求. 无根的情况: 建立超级根节点,向每个点连有向边,边权大于所有边权和即可.const int N=1010;const int inf=1000000000;struct node{ int oldu,oldv; //原始点 int u,v,w; //缩图后的点}e[N*N];int n,m,rt;int pre[N原创 2015-04-02 19:54:03 · 576 阅读 · 0 评论 -
图论_并查集
并查集①合并查找:将2个集合合并成1个集合.(并到一个集合的根上)②种类并查集:将不同种类的放到不同的层次上.③判正误:利用种类并查集分层,然后每输入一句话,就判断是否矛盾.模板种类并查集(分层)voidInite_DS(){ //初始化 for (int i=1;i pre[i]=i;原创 2015-03-18 20:21:14 · 679 阅读 · 0 评论 -
K 度限制生成树
K 度限制生成树:指定一个节点的度不能超过k 度.加边后,破圈.K度限制生成树const int N=500;struct node { int a,b,c; friend bool operator <(const node &a,const node &b){ return a.c<b.c; }}edge[N*N],ee; //edge 原图的边原创 2015-04-02 19:57:33 · 840 阅读 · 0 评论 -
最小比率生成树
最小比率生成树:每条边有花费和距离.选取的N-1 条边.使得花费总和Σcost/Σdist 距离总和最小.最小比率生成树//kruskal+Dinke(可用二分)double mid=0,b;int cnt; //加入MST中的节点个数while (1){ for (int i=1;i<=m;i++) dis[i].w=dis[i].h-dis[i].s*mid; //原创 2015-04-02 19:58:53 · 1048 阅读 · 0 评论 -
斯坦纳树
斯坦纳树//-------------------- Minimal Steiner Tree-------------------//G(V,E),A 是V 的一个子集,求至少包含A 中所有点的最小子树//时间复杂度O( N*M + N*2^A*(2^A+N) )//INIT: dis[][]距离矩阵; id[]置为集合A 中点的标号;//CALL: steiner(int n,in原创 2015-04-04 16:19:08 · 838 阅读 · 0 评论 -
hdu 4126(最小生成树+dp)
hdu 4126(最小生成树+dp)原创 2015-04-04 16:14:20 · 844 阅读 · 0 评论
分享