码迷,mamicode.com
首页 > 其他好文 > 详细

【复习】深夜复习傻逼图论的玩意

时间:2016-08-13 01:12:54      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

不写点东西明天要挂啊

不想看傻逼的直接跳到后面

 

0.存储结构(你妈写这个凑字数呀

邻接表&插入边

struct edge{
    int to,next,v;
}e[M];
int cnt,last[N];
void insert(int a,int b,int c){
    e[++cnt]=(edge){b,last[a],c};last[a]=cnt;
}
void link(int a,int b,int c){
    insert(a,b,c);insert(b,a,c); 
}

1.闭着眼睛摸了个spfa哈哈哈哈哈哈哈哈

bool inq[N];int dis[N];
void spfa(int s,int t){
    queue<int>q;
    inq[s]=true;
    FOR0(i,N)dis[i]=inf;
    dis[s]=0;q.push(s);
    while(!q.empty()){
        int c=q.front();q.pop();
        for(int i=last[c];i;i=e[i].next){
            int v=e[i].to;
            if(dis[v]>dis[c]+e[i].v){
                dis[v]=dis[c]+e[i].v;
                if(!inq[v]){
                    q.push(v);
                    inq[v]=true;
                }
            }
        }
        inq[c]=false;
    }
}

2.Tarjan · 逢写必错· 缩环算法

int scc,ind;
int bel[N],ins[N],low[N],dfn[N];
stack<int>s;
void tarjan(int v){
    low[v]=dfn[v]=++ind;
    s.push(v);ins[v]=true;
    for(int i=last[v];i;i=e[i].next){
        if(!dfn[e[i].to])    
            tarjan(e[i].to),low[v]=min(low[v],low[e[i].to]);
        else    if(ins[e[i].to])    
            low[v]=min(low[v],dfn[e[i].to]);
    } 
    int now=-1;
    if(dfn[x]==low[x]){
        ++scc;
        while(now!=x&&!s.empty()){
            int t=s.top();s.pop();
            ins[t]=false;
            bel[t]=scc;
        }
    }
}

如果有人发现这个也是错的明天加餐

这里是弹射标记

首先讨论一点和树有关的玩意

3.

LCA:基于倍增的:。。。

基于rmq的 :两点的LCA是两点dfs序间深度最浅的节点。。那么我们只要用最值查询的算法就好了

【感觉自己智商降低了

 

4.矩阵树定理

无向图生成树计数

预备知识:高斯消元,行列式

我们构建一个度数矩阵D  D(i,j)在i!=j时等于i的度数,否则等于0

构造一个邻接矩阵A

 

然后这个图的基尔霍夫(这个名字?)矩阵是G,G(i,j)=D(i,j)-A(i,j)

然后我们计算这个行列式的值,就是这个图的生成树个数了

明天啥时候再写呢。。

【复习】深夜复习傻逼图论的玩意

标签:

原文地址:http://www.cnblogs.com/chouti/p/5766991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!