• hdu 4849 Wow! Such City! 简单最短路


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4849

    理解题意,然后根据公式求出距离

    再套用最短路模板即可

    队友写的~

    #include <cstring>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <stack>
    #include <vector>
    #include <queue>
    
    using namespace std;
    
    typedef long long ll;
    typedef pair<ll, int> P;
    #define INF 0x3f3f3f3f
    const double eps = 1e-9;
    const int maxn = 1000;
    const int modx = 5837501;
    const int mody = 9860381;
    const int modz = 8475871;
    ll x[maxn*maxn+10], y[maxn*maxn+10];
    ll z[maxn*maxn+10];
    
    void build(int n, ll x0, ll x1, ll y0, ll y1)
    {
        int N = n*n;
        x[0] = x0; y[0] = y0;
        x[1] = x1; y[1] = y1;
        for(int i = 2; i < N; i++)
        {
            x[i] = (12345 + x[i-1]*23456 + x[i-2]*34567 + (x[i-1]*x[i-2]%modx)*45678)%modx;
            y[i] = (56789 + y[i-1]*67890 + y[i-2]*78901 + (y[i-1]*y[i-2]%mody)*89012)%mody;
        }
        for(int i = 0; i < N; i++)
            z[i] = (x[i]*90123 + y[i]) % modz + 1;
        //cout<<endl;
    }
    ll d[maxn+10];
    
    void Dijkstra(int n)
    {
        priority_queue<P, vector<P>, greater<P> > que;
        fill(d, d+n+1, INF);
        d[0] = 0;
        que.push(make_pair(d[0], 0));
        while(!que.empty())
        {
            P tp = que.top();que.pop();
            int u = tp.second;
            if(d[u] < tp.first)
                continue;
            for(int v = 0; v < n; v++)
            {
                if(v == u)    continue;
                ll dis = z[u*n+v];
                if(d[v] > d[u] + dis)
                {
                    d[v] = d[u]+ dis;
                    que.push(make_pair(d[v], v));
                }
            }
        }
    }
    int main()
    {
        int n,m,x0,x1,y0,y1;
        //freopen("in", "r", stdin);
        while(scanf("%d%d%d%d%d%d", &n, &m, &x0, &x1, &y0, &y1) != EOF)
        {
            build(n,(ll)x0,(ll)x1,(ll)y0,(ll)y1);
            Dijkstra(n);
            ll ans = m;
            for(int i = 1; i < n; i++)
                ans = min(ans, d[i]%m);
            printf("%I64d
    ", ans);
        }
    }
  • 相关阅读:
    Java反射研究(3)
    Java反射研究(2)
    Java反射研究(1)
    从百度文库中复制文本的方法
    jdk/bin中的native2ascii.exe使用
    EA经典入门教程
    JSP自定义标签(3)
    JSP自定义标签(1)
    将Java doc转换为chm的方法
    多态性——vptr和vtable
  • 原文地址:https://www.cnblogs.com/dishu/p/4518028.html
Copyright © 2020-2023  润新知