zoukankan      html  css  js  c++  java
  • P2384 最短路

    题目背景

    狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗?

    他会给你100000000000000000000000000000000000%10金币w

    题目描述

    给定n个点的带权有向图,求从1到n的路径中边权之积最小的简单路径。

    输入输出格式

    输入格式:

    第一行读入两个整数n,m,表示共n个点m条边。 接下来m行,每行三个正整数x,y,z,表示点x到点y有一条边权为z的边。

    输出格式:

    输出仅包括一行,记为所求路径的边权之积,由于答案可能很大,因此狗哥仁慈地让你输出它模9987的余数即可。

    废话当然是一个数了w

    //谢fyszzhouzj指正w

    对于20%的数据,n<=10。

    对于100%的数据,n<=1000,m<=1000000。边权不超过10000。

    输入输出样例

    输入样例#1: 复制
    3 3
    1 2 3 
    2 3 3 
    1 3 10
    输出样例#1: 复制
    9

    说明

    好好看一看再写哟w

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define mp make_pair
    #define pb push_back
    const int maxn = 100005;
    #define mod 9987
    const int N=1000005;
    
    // name*******************************
    int n,m;
    struct edge
    {
        int to,next,w;
    } e[N];
    int Head[N];
    int tot=0;
    int vis[N];
    double dis[N];
    int pre[N];
    int val[N];
    queue<int>que;
    
    // function******************************
    void add(int u,int v,int w)
    {
        e[++tot].to=v;
        e[tot].next=Head[u];
        Head[u]=tot;
        e[tot].w=w;
    }
    void spfa(int u)
    {
        que.push(u);
        dis[u]=0;
        vis[u]=1;
        while(!que.empty())
        {
            int u=que.front();
            vis[u]=0;
            que.pop();
            for(int p=Head[u]; p; p=e[p].next)
            {
                int v=e[p].to;
                int w=e[p].w;
                if(dis[v]>dis[u]+log(w))
                {
                    dis[v]=dis[u]+log(w);
                    pre[v]=u;
                    val[v]=w;
                    if(!vis[v])
                    {
                        vis[v]=1;
                        que.push(v);
                    }
                }
            }
        }
    }
    
    
    //***************************************
    int main()
    {
    //         freopen("test.txt", "r", stdin);
        int n,m;
        cin>>n>>m;
        For(i,1,m)
        {
            int u,v,w;
            cin>>u>>v>>w;
            add(u,v,w);
            add(v,u,w);
        }
        For(i,1,n)
        dis[i]=inf;
        spfa(1);
        int i=n;
        int ans=1;
        while(i!=1)
        {
            ans=(ans*val[i]%mod)%mod;
            i=pre[i];
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    大型网站架构系列:20本技术书籍推荐
    程序员进阶顺序
    乐观锁与悲观锁——解决并发问题
    Redis的事务功能详解
    驱动开发(8)处理设备I/O控制函数DeviceIoControl
    钱币兑换问题(杭电1284)(母函数)
    jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo
    问:简述一下内部类的实质是什么?
    Android 删除新版安卓fragment_main.xml
    保温饭盒毕业设计程序
  • 原文地址:https://www.cnblogs.com/planche/p/8688989.html
Copyright © 2011-2022 走看看