• HDU 1535 Invitation Cards (POJ 1511)


    两次SPFA。

    求 来 和 回 的最短路之和。

    用Dijkstra+邻接矩阵确实好写+方便交换。可是这个有1000000个点。矩阵开不了。


    d1[]为 1~N 的最短路。

    将全部边的 邻点 交换。

    d2[] 为 1~N 的最短路。


    全部相加为 所要答案。

    忧伤的是用SPFA  “HDU 1535”  AC了。可是POJ 一样的题 “POJ 1511” 就WA了。


    然后强迫症犯了。不停的去測试。


    题意中找到一句关键话 :Prices are positive integers the sum of which is smaller than 1000000000

    本来int 能够的。HDU 就是这样。

    然后我就把POJ的求和 改成了 long long 。

    还是WA。

    然后发现 我的INF 有问题。0xfffffff 不够。然后改成0x7fffffff int的最大值。AC了。

    POJ 数据也真是屌。

    全然不看题意的。


    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #include<list>
    #include<set>
    #include<cmath>
    #define INF 0x7fffffff
    #define eps 1e-6
    using namespace std;
    int n,m;
    struct lx
    {
        int v,d;
    };
    int dis[1000001];
    bool vis[1000001];
    int e[1000001];
    vector<lx>g[1000001];
    void swapg()
    {
        for(int i=1;i<=n;i++)
            e[i]=g[i].size();
        for(int i=1;i<=n;i++)
        {
            int u,v,d;
            lx now;
            u=i;
            for(int j=0;j<e[i];j++)
            {
                v=g[u][j].v,d=g[u][j].d;
                now.d=d,now.v=u;
                g[v].push_back(now);
            }
        }
    }
    int SPFA(int thend) // long long
    {
        for(int i=1;i<=n;i++)
            dis[i]=INF,vis[i]=0;
        queue<int>q;
        dis[1]=0,vis[1]=1;
        q.push(1);
        while(!q.empty())
        {
            int u=q.front();q.pop();
            vis[u]=0;
            for(int j=e[u];j<g[u].size();j++)
            {
                int v=g[u][j].v;
                int d=g[u][j].d;
                if(dis[v]>dis[u]+d)
                {
                    dis[v]=dis[u]+d;
                    if(!vis[v])
                    {
                        vis[v]=1;
                        q.push(v);
                    }
                }
            }
        }
        int ans=0; //long long
        for(int i=1;i<=n;i++)
            ans+=dis[i];
        return ans;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            int u,v,d;
            lx now;
            for(int i=1;i<=n;i++)
                g[i].clear();
            while(m--)
            {
                scanf("%d%d%d",&u,&v,&d);
                now.d=d;
                now.v=v;
                g[u].push_back(now);
            }
            memset(e,0,sizeof(e));
            int dis1=SPFA(n); //long long
            swapg();
            int dis2=SPFA(n); //long long
            printf("%d
    ",dis1+dis2); // lld%
        }
    }
    




  • 相关阅读:
    Java将对象保存到文件中/从文件中读取对象
    Python爬虫框架--Scrapy安装以及简单实用
    Python--网络爬虫模块requests模块之响应--response
    用Pycharm创建指定的Django版本
    python网络爬虫之requests模块
    Python---异常处理
    Python函数的装饰器修复技术(@wraps)
    Django Rest framework
    Vue的基础使用
    Vue
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5121604.html
Copyright © 2020-2023  润新知