图论
文章平均质量分 57
无敌大饺子
这个作者很懒,什么都没留下…
展开
-
UVA 10720 - Graph Construction
题目意思是给出一序列的定点的度数,判断能否组成一个图.对于每个图,消去度最大的那个点,消去的方法假设度最大的点分别与度第二大,度第三大,...度第N大的点连有边(N刚好满足把该点的度消为0),如此消去该图,一直这么操作,如果可以把所有的点的度都消为0,就YES,否则NO;#include #include #include #include #include using na原创 2013-03-14 10:29:57 · 709 阅读 · 0 评论 -
蓝桥杯练习系统 ALGO-5 最短路
问题描述给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。输入格式第一行两个整数n, m。接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。输出格式共n-1行,第i行表示1号点到i+1号点的最短路。样例输入3 31 2 -12 3原创 2014-03-16 19:31:55 · 751 阅读 · 0 评论 -
ZOJ 2500 Median Weight Bead
分别保存两个图,第一个图表示u大于v,第二个图为反向图,表示u小于v.然后用floyd或者dfs求出这两个图各个顶点的能到达的结点数量,如果某个点数量大于n/2说明这个数不可能成为中位数.#include #include #include const int maxn = 105;int g1[maxn][maxn], g2[maxn][maxn], n, m;bool原创 2013-05-15 13:43:23 · 534 阅读 · 0 评论 -
ZOJ 2326 Tangled in Cables
裸体最小生成树.#include #include #include #include #include using namespace std;const int maxn = 301;map sToNum;struct edge{ int u, v; double w; bool operator<(const edge & rhs)const{ return w原创 2013-05-14 20:01:38 · 526 阅读 · 0 评论 -
ZOJ 1298 Domino Effect
首先dijkstra求出最短路,求的时候顺便求出1能到的最长路记为ans * 2.枚举每条边,满足dis[i] + dis[j] + g[i][j] > ans 更新ans.最后输出答案ans / 2;/* * ZOJ 1298.cpp * * Created on: May 27, 2013 * Author: root */#include #includ原创 2013-05-27 21:23:21 · 460 阅读 · 0 评论 -
ZOJ 2103 Marco Popo the Traveler(无向图欧拉路径)
判断欧拉路,欧拉回路:注意图联通,可以DFS或者并查集一.无向图欧拉回路:每个顶点度数都是偶数欧拉路:所有点度数为偶数,或者只有2个点度数为奇数二.有向图(非混合)欧拉回路:每个顶点入度等于出度欧拉路:每个顶点入度等于出度;或者只有1个点入度比出度小1, 从这点出发,只有1个点出度比入度小1,从这个点结束,其他点入度等于出度三原创 2013-05-13 08:49:16 · 743 阅读 · 0 评论 -
ZOJ 2682 People like People(DFS)
首先进行删点操作.对于入度为0的点u 删除点u, 将u的邻接点的入度减1,一直删除直到不存在入度为0的点..(保证了每个点都被别人喜欢)对于出度为0的点u 删除点u,并删除所有连接到点u的点,一直删除直到没有出度为0的点.(保证了每个点都喜欢别人)然后对(正图和反图合并)进行DFS,找出结点数最多的分量,输出结果.#include #include #include #i原创 2013-05-17 21:09:32 · 749 阅读 · 0 评论 -
POJ 1273 Drainage Ditches(最大流入门题)
里面可能有重边 可以把重边全部加在一起就可以了,用的是EK算法.#include #include #include #include using namespace std;#define INF 0X50505050const int maxn = 205;int g[maxn][maxn], fa[maxn], n, m;bool vis[maxn];bool b原创 2013-05-02 15:35:18 · 568 阅读 · 0 评论 -
ZOJ 1655 Transport Goods(dijkstra最短路)
首先按照求n到各个点的最短距离,松弛条件是dis[v]然后像拓扑排序一样对最短路上每一个点设置一个入度,只有点的入度为0的时候,才把这个点上的东西送到路径上的下一个点#include #include #include #include #include using namespace std;#define pdi pair const int maxn=110;doub原创 2013-04-19 16:19:57 · 475 阅读 · 0 评论 -
ZOJ 1119 SPF(tarjan求割点)
关于割点的内容参考这篇文章:http://www.byvoid.com/en/blog/biconnect//* 1、若深度优先生成树的根有两棵或两棵以上的子树,则此根顶点必定为关节点。*/ /* 2、若生成树中某个非叶子顶点v,其孩子结点均没有指向 v 的祖先的回边,则 v 为关节点。*/ #include #include #include #include原创 2013-04-16 09:40:52 · 533 阅读 · 0 评论 -
ZOJ 1544 Currency Exchange(bellman_ford)
因为货币可以无限的进行兑换,所以只要存在正回路就一定能成功#include #include #include using namespace std;const int maxn=110;struct edge{ int u,v; double rate,coms;}es[maxn*2];double dis[maxn],V;int n,m,S;void addEdge原创 2013-04-16 21:12:30 · 702 阅读 · 0 评论 -
ZOJ 1542 Network(裸MST)
sample好像有点问题#include #include #include #include using namespace std;const int pmaxn=1010,emaxn=15010;struct edge{ int u,v,w; bool operator<(const edge&rhs)const{ return w<rhs.w; }}es[em原创 2013-04-16 15:17:45 · 576 阅读 · 0 评论 -
ZOJ 1311 Network(tarjan求割点)
#include #include #include #include #include using namespace std;const int maxn=100;struct edge{ int v,next;}es[maxn*5];int dfn[maxn],low[maxn],head[maxn],idx,i,n,ans;char buf[maxn];void i原创 2013-04-16 12:39:52 · 579 阅读 · 0 评论 -
SPFA算法详解
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是转载 2013-04-07 09:59:52 · 756 阅读 · 0 评论 -
ZOJ 2008 Invitation Cards(邻接表+spfa||dijkstra)
这题收获很大,求1到所有点的最短距离,然后再求所有点到1的最短距离,把所有的边反一下在求1到所有点的最短距离就是所有点到1的最短距离了.刚开始用new直接就TLE了还以为是最短路算法问题,试了dijkstra还有spfa都是TLE,后来看了解题报告才发现必须要用静态邻接表才能过,最后运行时间:dijkstra 290ms,spfa 280ms.还是spfa稍好一点,并且易于实现#i原创 2013-04-07 09:57:54 · 634 阅读 · 0 评论 -
POJ 1041 - John's trip
第一次写欧拉回路,哭了#include #include #include #include #include using namespace std;#define MAXSTREET 2000#define MAXJUNC 50int path[MAXSTREET],dg[MAXJUNC],pNum,maxj;struct Edge{ int v,num,deleted;原创 2013-03-29 11:09:49 · 588 阅读 · 0 评论 -
UVA 247 - Calling Circles(tarjan 强连通算法)
tarjan算法参考:http://kmplayer.iteye.com/blog/604532#include #include #include #include #include #include #include using namespace std;#define MAX 30int dfn[MAX],low[MAX],instak[MAX],idx,n,m;c原创 2013-03-28 22:15:58 · 1011 阅读 · 0 评论 -
Havel-Hakimi定理(判断一个度数序列是否可图)
1,Havel-Hakimi定理主要用来判定一个给定的序列是否是可图的。2,首先介绍一下度序列:若把图 G 所有顶点的度数排成一个序列 S,则称 S 为图 G 的度序列。3,一个非负整数组成的有限序列如果是某个无向图的序列,则称该序列是可图的。4,判定过程:(1)对当前数列排序,使其呈递减,(2)从S【2】开始对其后S【1】个数字-1,(3)一直循环直到当前序列出现负数(即不是可图的情转载 2013-03-14 14:30:31 · 1540 阅读 · 1 评论 -
ZOJ 3321 Circle
题意:给出一个图的N个点,M条边,判断这个图是否是一个环,图里没有自环,重边.思路:给出的N和M都很小,首先题目里已经给出定义,如果N都满足的条件下,用类似欧拉回路的方法删边去dfs就可以了.#include #include using namespace std;const int MAX = 21;int n, m;int end;bool g[MAX][MAX];原创 2014-04-03 20:47:57 · 567 阅读 · 0 评论