• 【 ACM-ICPC 2018 沈阳赛区网络预赛 D】Made In Heaven


    【链接】 我是链接,点我呀:)
    【题意】

    在这里输入题意

    【题解】

    点可以重复走的k短路。

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define lson l,mid,rt<<1
    #define ri(x) scanf("%d",&x)
    #define rl(x) scanf("%lld",&x)
    #define rs(x) scanf("%s",x)
    #define rson mid+1,r,rt<<1|1
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    using namespace std;
    #define CL(a,num)  memset(a,num,sizeof(a));
    #define inf 9999999
    #define eps  1e-6
    const int N = 1050;
    struct node
    {
        int u;
        int w;
        node (int uu,int ww):u(uu),w(ww){}
    };
    vector<node>g[N],rg[N];
    int dis[N],vis[N],tol[N];
    struct cnode
    {
        int u;
        int len;
        cnode (int uu,int ww):u(uu),len(ww){}
        friend bool operator < (cnode a,cnode b)
        {
            return a.len+dis[a.u]>b.len+dis[b.u];
        }
    };
    int n,m,s,t,k;
    int T;
    
    int A_star(int s)
    {
        if(dis[s]==inf)return -1;
        priority_queue<cnode>que;
        CL(tol,0);
        que.push(cnode(s,0));
        while(!que.empty())
        {
            cnode a=que.top();que.pop();
            int u=a.u;
            int len=a.len;
            tol[u]++;
            if(tol[t]==k)return len;
    
            rep1(i,0,(int)g[u].size()-1){
                node b=g[u][i];
                int v=b.u;
                que.push(cnode(v,len+b.w));
            }
        }
        return -1;
    }
    
    void spfa(int s)
    {
        int i;
        for(i=0;i<=n;i++)
        {
            dis[i]=inf;
            vis[i]=0;
        }
        dis[s]=0;
        queue<int>que;
        que.push(s);
        while(!que.empty())
        {
            int u=que.front();que.pop();
            vis[u]=0;
            //if (dis[u]>T) continue;
            rep1(i,0,(int)rg[u].size()-1){
                node b=rg[u][i];
                int v=b.u;
                if(dis[v]>dis[u]+b.w)
                {
                    dis[v]=dis[u]+b.w;
                    if(!vis[v])
                    {
                        vis[v]=1;
                        que.push(v);
                    }
                }
            }
        }
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            int x,y,z;
            rep1(i,0,n){
                g[i].clear();rg[i].clear();
            }
            ri(s);ri(t);ri(k);ri(T);
            rep1(i,0,m-1){
                ri(x);ri(y);ri(z);
                g[x].push_back(node(y,z));rg[y].push_back(node(x,z));
            }
    
            spfa(t);
            int ans=A_star(s);
            if (ans==-1 || ans>T){
                puts("Whitesnake!");
            }else{
                puts("yareyaredawa");
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    scss-@for 指令
    scss-@else if指令
    pandas dataframe在指定的位置添加一列, 或者一次性添加几列,re
    数据挖掘之Python调用R包、函数、脚本
    数据挖掘之各种聚类算法的比较 (转载)
    数据挖掘之分类算法概述与比较(转载)
    数据挖掘之数据规范化
    数据分析之集成算法
    数据分析之随机森林
    数据挖掘之数据规约
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9625383.html
Copyright © 2020-2023  润新知