zoukankan      html  css  js  c++  java
  • Skiing (SPFA最长路)

    =-=超时超的很玄学,图拿vector存超时,cin,cout超时=-=迷

    之前听到SPFA感觉,,,这好像是个很难的算法,其实现在看一看发现,并不是那么的难以理解

    详细的讲解可以戳:最快最好用的——spfa算法 

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=105;
    ll m,n,maxx;
    struct edge{
        int to,w,nxt;
    }e[100005];
    ll dis[10005];
    int head[100005];
    int deg[10005];
    queue<int>q;
    int cnt=0;
    void add_edge(int u,int v,int we)
    {
        e[cnt].to=v;
        e[cnt].w=we;
        e[cnt].nxt=head[u];
        head[u]=cnt++;
    }
    void SPFA(int i)
    {
        while(!q.empty()) q.pop();
        q.push(i);
        while(!q.empty())
        {
            int u=q.front();q.pop();
            for(int j=head[u];~j;j=e[j].nxt)
            {
                int v=e[j].to;
                if(dis[v]<dis[u]+e[j].w)
                {
                    dis[v]=dis[u]+e[j].w;
                    q.push(v);
                }
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin>>t;
        while(t--)
        {
            int u,v,we;
            cnt=0;
            maxx=0;
            memset(dp,0,sizeof(dis));
            memset(deg,0,sizeof(deg));
            memset(head,-1,sizeof(head));
            cin>>n>>m;
            for(int i=0;i<m;i++)
            {cin>>u>>v>>we;add_edge(u,v,we);deg[v]++;}
            if(n==1)
            {
              cout<<"0"<<endl;
              continue;
            }
            for(int i=1;i<=n;i++)
            if(!deg[i]) SPFA(i);
            for(int i=1;i<=n;i++)
                maxx=max(maxx,dis[i]);
            cout<<maxx<<endl;
        }
        return 0;
    }
  • 相关阅读:
    zpf 视图
    html5本地存储
    sqlite 使用记录
    百度开放平台
    PHP exit() 输出
    yum笔记
    手动编译安装软件
    while循环
    linux下面测试网络带宽 (转载)
    软件包管理器的核心功能(笔记)
  • 原文地址:https://www.cnblogs.com/Egoist-/p/8412607.html
Copyright © 2011-2022 走看看