图论
acmer_zp
这个作者很懒,什么都没留下…
展开
-
带权二分图匹配KM算法
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int INF=0x7fffffff;int flag;struct zp{ int x,y;}man[200],house[200];int x[200][200],mn,ho,l原创 2016-11-11 17:43:56 · 751 阅读 · 1 评论 -
tarjan(hdu 5934)
题目链接 题意:给n个炸弹的坐标和爆炸半径,引爆代价。当另一个炸弹在一个炸弹的爆炸范围之内,则这个炸弹也会爆炸。求让所有炸弹爆炸的最小花费。 思路:根据炸弹之间的关系建图,比如a能引爆b就在a到b建立一条有向边。然后将图缩点,然后统计入度为0的点的爆炸代价,累加就是结果。 同一个强联通分量里面的点取价值最小的那个引爆,入度不为0的点肯定能由其他入度为0的点到达。#include<iostrea原创 2017-09-30 18:59:42 · 341 阅读 · 0 评论 -
取模最短路
hdu 6071 题意:图上有4个点,给定一个k求从2点出发最后回到2这个点且距离不小于k的最短距离。 思路:题目上说的从2出发最后又回到2,所以这是一个回路,而两个回路可以形成一个新的回路,假如现在有两个回路,长度分别为a和b则可以形成新的回路长度a+n*b。题目上让求不小于k的最短路又是回路,所以我们可以找到从2点出发的最小回路将它看做前边提到的b则,我们只需要找到最小的a就可以找到最优解了原创 2017-08-05 12:46:13 · 842 阅读 · 0 评论 -
Dijkstar及其优先队列优化
#include#include#include#include#include#include#define MAXX 1000000using namespace std;int n,m,s,t,cont,x[1010][1010];int first[MAXX],next1[MAXX],u[MAXX],v[MAXX],w[MAXX],dis[MAXX],vis[MAXX];原创 2016-10-18 18:29:13 · 691 阅读 · 0 评论 -
最小路径覆盖(二分图)
POJ - 2594 题意:派机器人去火星寻宝,给出一个无环的有向图,机器人可以降落在任何一个点上,再沿着路去其他点探索,我们的任务是计算至少派多少机器人就可以访问到所有的点。有的点可以重复去。 思路:根据题面可以看出是让求最小路径覆盖的,但是又有限制条件,就是每个点可以重复去,但是最小路径覆盖里的点只能去一次,所以要用到缩点,比如1->2,2->3所以1->3这样就可以保证每个点不止可以用一原创 2017-03-31 17:16:13 · 433 阅读 · 0 评论 -
Bellman及其优化
#include#include#include#include#include#include#include#include#define MAXX 1e6using namespace std;int first[1000010],NEXT[1000010],u[1000010],v[1000010],w[1000010],cont,dis[1000010],vis[1原创 2016-10-18 18:28:41 · 338 阅读 · 0 评论 -
二分最大匹配数
#include#include#include#includeusing namespace std;int z[1010][1010],vis[1010],dis[1010],n,m;int dfs(int k){ for(int i=1; i<=n; i++) if(z[k][i]&&!vis[i])//i点未标记,k于i可配对 {原创 2016-10-18 19:47:28 · 354 阅读 · 0 评论 -
多边形重心
#include#include#include#include#includeusing namespace std;#define INF 0.0000001const int N=10010;int n;typedef struct point{ double x,y; point():x(0),y(0){}}point;point p[N],ANS;原创 2016-10-18 19:47:00 · 234 阅读 · 0 评论 -
prim及其:队列优化
prim://矩阵输入的prim 有n*n的矩阵,求最小生成树#include#include#define spot 1000const int inf=0x3f3f3f3f;int a[spot+10][spot+10],dis[spot+10],b[spot+10]; //a[][]存矩阵,b[]标记,dis[]距离int main(){ int n;原创 2016-10-18 19:11:51 · 504 阅读 · 0 评论 -
kruscal
#include//m条边,n个点#include#include#includeusing namespace std;int vis[100010];struct zp{ int u; int v; int w;} x[1000010];bool cmp(zp a,zp b){ return a.w<b.w;}int FIND(int n原创 2016-10-18 19:06:40 · 333 阅读 · 0 评论 -
Floyd最短路
#include#include#include#includeusing namespace std;const int MAXN=1e3+10;int x[MAXN][MAXN]int main(){ int n,m;//n个点m条边 while(~scanf("%d%d",&n,&m)) { int a,b,c; mem原创 2016-10-18 18:30:55 · 306 阅读 · 0 评论 -
无向图欧拉路的判定
#include//图联通 并且有2个或者没有奇数度节点,没有的是欧拉回路#include#include#include#includeusing namespace std;const int maxn=1e6+10;int bin[maxn];int finds(int x){ int flag=x,j; while(x!=bin[x])原创 2016-10-23 18:44:31 · 755 阅读 · 0 评论 -
Fleury算法求欧拉路径
注意是有向图#include//图联通 并且有2个或者没有奇数度节点,没有的是欧拉回路#include#include#include#include#includeusing namespace std;const int maxn=1e6+10;struct Edge{ int from,to;}z;vector w;vector s[maxn];int原创 2016-10-23 20:45:25 · 469 阅读 · 0 评论 -
最小点覆盖,最小边覆盖,最大匹配,最小路径覆盖,最大独立集总结。
如果没有申明是什么图默认是二分图最小点覆盖:点覆盖的概念定义: 对于图G=(V,E)中的一个点覆盖是一个集合S⊆V使得每一条边至少有一个端点在S中。最小点覆盖:就是中点的个数最少的S集合。 普通图的最小点覆盖数好像只能用搜索解,没有什么比较好的方法(可能我比较弱。。)所以在此只讨论二分图的最小点覆盖的求法结论: 二分图的最小点覆盖数=该二分图的最大匹配数,具体证明的方法看大佬博客,里面还给出了如原创 2017-11-18 20:17:37 · 8946 阅读 · 1 评论