• 链式前向星的两种写法


    1.y氏写法

    链式前向星注意事项,如果a->b,b->c在前向星中a的临点只有b,所以在求连通块的数量的时候不能一次dfs,要多次dfs!
    
    const int N=?,M=??;//N是点数,M是边数
    
    int h[N],e[M],ne[M],idx;
    
    void add(int a,int b,int W)
    {
        e[idx]=b;
        w[idx]=W;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    
    for(int i=h[u];~i;i=ne[i])
    {
        i可以理解为点的编号,在无向图建立反向边,tarjan求父节点可以写成 tarjan(j,i)//遍历下一个点,父节点为i
        i从idx=0开始的,和 i^1不谋而合
        int j=e[i];//下一个点是
        int W=w[i];//a->的边权是
    }
    输入
    3 4
    1 2
    1 3
    2 3
    3 2
    输出
    这是第1个点
    1 0 
    这是第2个点
    2 
    这是第3个点
    3  
    可见i可以代表某条边
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int N=1e5+10,M=N*2;
    
    int h[N],e[M],ne[M],idx;
    void add(int a,int b)
    {
        e[idx]=b;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    int main()
    {
        int n,m;
        cin>>n>>m;
        memset(h,-1,sizeof h);
        
        while(m--)
        {
            int a,b;cin>>a>>b;
            add(a,b);
        }
        for(int i=1;i<=n;i++)//起点
        {
            cout<<"这是第"<<i<<"个点"<<endl;
            for(int j=h[i];~j;j=ne[j])
            {
                int k=e[j];
                cout<<j<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    

    2.黑书写法

    const int N=?,M=??;//N是点数,M是边数
    
    int idx=0,h[N];
    struct edge
    {
        int to,next,w;
    }edge[N];
    
    void add(int u,int v,int W)
    {
        edge[idx].to=v;
        edge[idx].w=W;
        edge[idx].next=head[u]
        head[u]=idx++;
    }
    
    for(int i=h[u];~i;i=edge[i].next)
    {
        int j=edge[i].to;//下一条边
        int W=edge[i].w;//边权
    }
    
    
  • 相关阅读:
    $(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法
    ASP.NET MVC之文件上传【二】
    ASP.NET MVC之文件上传【一】
    [JSOI2009]球队收益
    Codeforces 323 B Tournament-graph
    2017 [六省联考] T6 寿司餐厅
    [CQOI2014]数三角形
    Hdoj 3506 Monkey Party
    Loj #125. 除数函数求和(2)
    Codeforces 235 E Number Challenge
  • 原文地址:https://www.cnblogs.com/forward-985/p/13693007.html
Copyright © 2020-2023  润新知