图论
文章平均质量分 69
DASEason
https://github.com/qq547276542
展开
-
求无向图的 边-双连通分量
/*去掉桥,其余的连通分支就是边双连通分支了。一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树。通过遍历所有桥来统计缩点树的各结点度数,需要加的边为(leaf+1)/2(leaf 为叶子结点个数)*/const int MAXN = 5010;//点数const int MAXM = 20010;//边数,因为是无向图,所以这个值要*2struct Edge {原创 2015-08-19 16:20:28 · 943 阅读 · 0 评论 -
SPFA算法
const int maxn=1007;const int INF=0x7fffffff;struct Edge { int from ,to, dist; Edge(int u,int v,int d):from(u),to(v),dist(d) {}};struct SPFA { int n,m; vector edges; vector G[m原创 2015-08-19 15:46:23 · 1816 阅读 · 0 评论 -
二分图-最大匹配,最小路径覆盖,最小点覆盖(KM算法)
正式的定义,网上一大把,但他们的作用是让人看不懂……二分图:把点分成两个集合X,Y,使得图的边的两个端点总是分别落在X和Y上,不会有X中的点连向X中的点,不会有Y中的点连向Y中的点匹配:实质上是二分图中的一个边集,边集中出现的点不会重合,比如有a-b了,就不会有a-c了,要是有了a就重合了最大匹配:这个边集的数目最大的那个匹配匈牙利算法——增广路:一条在X和原创 2015-08-19 16:26:05 · 2927 阅读 · 0 评论 -
topo排序(邻接表) 判断topo序列是否存在,是否唯一,以及输出序列
const int maxn=1e3+7;struct Topo { int indeg[maxn],n; vector G[maxn],path; void init(int n) { this->n=n; for(int i=0; i<=n; i++) G[i].clear(); memset(i原创 2017-03-07 22:22:27 · 2244 阅读 · 0 评论 -
社交网络度量---中心性
中心性定义了网络中一个结点的重要性。换句话说,我们要求的是,在社会网络中,谁是中心角色(具有影响力的用户)举个例子,某个明星开通了微博,在短短数小时内,就有几十万的粉丝关注了他的微博。我们可以认为,他的“受欢迎程度”很高。如果把社交网络中的关注行为看做一条有向边,那么受关注的结点一般拥有很高的“入度”,那么我们能够把一个结点的入度看做是结点中心性的度量指标。当然这只是一个最简单的估计方法,还有原创 2017-04-20 12:46:03 · 29351 阅读 · 0 评论 -
Louvain 社团发现算法学习(我的java实现+数据用例)
为了大家方便,直接把数据放在github了:https://github.com/qq547276542/Louvain算法介绍:Louvain 算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度。社区网络的模块度(Modularity)是评估一个社区网络划分好坏的度量方法,它的含义是社区内节点的连边数与随机情况下的...原创 2017-04-14 20:22:06 · 30309 阅读 · 50 评论 -
遗传算法解决TSP问题(c++实现)
遗传算法遗传算法简介 遗传算法(Genetic Algorithms,简称 GA)是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,它是模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。遗传算法的实质是通过群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解或准最优解。它必须做以下操作:初始群体的产生、求每一个体的适应度、根据适者生存的原则选择优良个体、被选出的优良个体两两配对原创 2017-09-02 22:25:45 · 25248 阅读 · 7 评论 -
模拟退火算法(c++实现)
模拟退火算法算法简介 模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。当系统完全被冷却时,最终形成处于低能状态的晶体。 假定我们要解决的问题是一个寻找最小值的优化问题。将物理原创 2017-09-02 13:46:47 · 18593 阅读 · 4 评论 -
2-SAT 模板
在实际问题中,2-SAT问题在大多数时候表现成以下形式:有N对物品,每对物品中必须选取一个,也只能选取一个,并且它们之间存在某些限制关系(如某两个物品不能都选,某两个物品不能都不选,某两个物品必须且只能选一个,某个物品必选)等,这时,可以将每对物品当成一个布尔值(选取第一个物品相当于0,选取第二个相当于1),如果所有的限制关系最多只对两个物品进行限制,则它们都可以转化成9种基本限制关系,从而转化为原创 2015-10-10 10:36:29 · 720 阅读 · 0 评论 -
网络流(dinic算法)
const int maxn=50050;const int INF=0x7fffffff;#define M 11#define LL long longstruct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}};struct Dinic原创 2015-08-20 10:13:03 · 1931 阅读 · 0 评论 -
树链剖分+树状数组
#include #include #include #include #include #include #include #include using namespace std;const int MAXN = 50010;struct Edge { int to,next;} edge[MAXN*2];int head[MAXN],tot;int top[原创 2015-10-04 11:43:11 · 2033 阅读 · 0 评论 -
topo排序(入度法)(可判断topo排序是否唯一)
int G[maxn][maxn],indegree[maxn],topo[maxn],n,m; //topo[]可打印topo排序void Addedge(int u,int v) //添加有向边u->v{ G[u][v]=1; indegree[v]++; //终点入度+1}void init() //初始化边和入度{ memset(原创 2015-08-20 10:38:33 · 1496 阅读 · 0 评论 -
生成树计数(和MOD取模)
#include #include #include #include using namespace std;const int MOD = 10007;int INV[MOD];//求ax = 1( mod m) 的x值,就是逆元(0<a<m)long long inv(long long a,long long m) { if(a == 1)return 1;原创 2015-10-04 11:15:30 · 1962 阅读 · 0 评论 -
求LCA(最近公共祖先)
#include #include #include #include #include #include #include #include using namespace std;const int MAXN = 10010;int rmq[2*MAXN];//rmq数组,就是欧拉序列对应的深度序列struct ST { int mm[2*MAXN]; i原创 2015-10-04 12:07:00 · 1854 阅读 · 0 评论 -
求无向图割顶,桥,删除点后增加的连通块数
const int MAXN=10010,MAXM=100010;//点的下标切记转换成由1~nstruct Edge{ int to,next; bool cut; //是否为桥的标记*******}edge[MAXM]; //边数组/* 遍历点u的临接边 for(int i=head[u];i!=-1;i=edge[i].next) { edg原创 2015-08-19 16:16:03 · 2315 阅读 · 0 评论 -
树的最小表示
string min_pre(string str){ //原串中为树的dfs路线,0代表进入子树,1代表返回父节点 vector box; string ret = ""; int equal = 0, st = 0; for(int i = 0; i < str.size(); i++){ if(str[i] == '0原创 2015-10-04 12:20:09 · 841 阅读 · 0 评论 -
求点双连通分量
#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=10007;int iscut[maxn]; //割点标志int bccno[maxn]; //i点属于哪个点双连通分块int pre[maxn], dfs_clock, b原创 2015-10-10 10:38:53 · 2085 阅读 · 0 评论 -
最小树形图(有向图的最小生成树)
#include #include #include #include using namespace std;/* * 最小树形图(确定根,求有向图最小生成树) * int型 * 复杂度O(NM) * 点从0开始 */const int INF = 0x7fffffff;const int MAXN = 1010;const int MAXM = 40010;stru原创 2015-10-04 12:08:56 · 1628 阅读 · 0 评论 -
最小费用最大流
#include #include #include #include #include #include using namespace std;const int maxn=2007;const int INF=0x7fffffff;struct Edge{ int from,to,cap,flow,cost;};struct MCMF{ int n,m,s,原创 2015-10-04 12:27:03 · 1832 阅读 · 0 评论 -
农业领域的知识图谱构建(Agriculture_KnowledgeGraph)
Agriculture_KnowledgeGraphdemo:http://ecnukg.vicp.io github:https://github.com/qq547276542/Agriculture_KnowledgeGraph 欢迎star&fork~命名实体识别进入主页面,输入文本,即可看到以下命名实体和分词的结果(确保django和neo4j都处于开启状态)...原创 2019-11-29 20:32:48 · 23135 阅读 · 13 评论