zoukankan      html  css  js  c++  java
  • Extended Traffic

    题目链接

    题意:有n个路口,m条通路,如果经过一条路则会得到(终点 - 起点)^3的权值,求从1点到其他点的最小权值,如果权值小于3或无法到达输出‘?’。 题解:因为权值可能为负,所以用SPFA来解题,如果这个点在负环中的话那么最后的权值一定小于3,注意最后输出的时候的判断。注意边的数量,这道题巨坑,没有给范围,建议数组开到最大。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <queue>
    #include <cmath>
    
    using namespace std;
    
    const int maxn = 205;
    const int INF = 1e9+7;
    
    int head[maxn],num,n,m,a[maxn],ans[maxn],dis[maxn];
    
    struct edge
    {
        int to,next,w;
    }s[1000000];
    
    void add(int u,int v,int w)
    {
        s[num].to = v;
        s[num].w = w;
        s[num].next = head[u];
        head[u] = num++;
    }
    
    void SPFA()
    {
        int f[maxn],i,u,v,w;
        queue<int> q;
        for(i=1;i<=n;i++)
            dis[i] = INF;
        dis[1] = 0;
        q.push(1);
        memset(f,0,sizeof(f));
        memset(ans,0,sizeof(ans));
        f[1] = 1;
        ans[1] = 1;
        while(!q.empty())
        {
            u = q.front();
            //cout<<u<<endl;
            q.pop();
            f[u] = 0;
            for(i=head[u];i!=-1;i=s[i].next)
            {
                v = s[i].to;
                w = s[i].w;
                if(dis[u]+w<dis[v])
                {
                    dis[v] = dis[u] + w;
                    if(!f[v]&&ans[v]<=n)
                    {
                        f[v] = 1;
                        ans[v]++;
                        q.push(v);
                    }
                }
            }
        }
    }
    
    int main()
    {
        int i,t,k = 1,u,v;
        scanf("%d",&t);
        while(t--)
        {
            num = 0;
            memset(head,-1,sizeof(head));
            scanf("%d",&n);
            for(i=1;i<=n;i++)
                scanf("%d",&a[i]);
            scanf("%d",&m);
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&u,&v);
                add(u,v,(a[v]-a[u])*(a[v]-a[u])*(a[v]-a[u]));
            }
            SPFA();
    //        for(i=1;i<=n;i++)
    //        {
    //            printf("%d ",dis[i]);
    //        }
    //        printf("
    ");
            scanf("%d",&m);
            printf("Case %d:
    ",k++);
            while(m--)
            {
                scanf("%d",&u);
                if(dis[u]<3||dis[u]==INF||ans[u]>n)
                    printf("?
    ");
                else
                    printf("%d
    ",dis[u]);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    butterknife异常提示:attribute value must be constant
    SharedPreferences第一次使用后HashMap将常驻内存
    js获取元素的innerText属性为什么为空
    针对focus和blur的Dom事件触发顺序
    android中View的GONE和INVISIBLE的原理
    HTML中div以及span等元素获取焦点
    android MotionEvent获得当前位置
    IE10 透明背景的div无法遮罩
    jquery中.attr('value')和.val()的区别
    __proto__和protaotype的区分
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9908039.html
Copyright © 2011-2022 走看看