zoukankan      html  css  js  c++  java
  • Extended Traffic LightOJ

    //判断负环  在负环内的城市输出? 
    #include <iostream>
    #include <queue>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    #include <string>
    using namespace std;
    typedef long long LL;
    const int N=4e5+10;
    int abc[205];
    int T,n,m,q;
    int h[N],e[N],ne[N],w[N],idx;
    int len(int u,int v){
        return (abc[v]-abc[u])*(abc[v]-abc[u])*(abc[v]-abc[u]);
    }
    void add(int a,int b)
    {
        e[idx]=b;
        w[idx]=len(a,b);
        ne[idx]=h[a];
        h[a]=idx++;
    }
    int dist[205],st[205],times[205],cycle[205];
    void spfa()
    {
        memset(dist,125,sizeof(dist));
        memset(st,0,sizeof(st));
        memset(times,0,sizeof(times));
        memset(cycle,0,sizeof(cycle));
        queue<int>q;
        st[1]=times[1]=1;
        dist[1]=0;
        q.push(1);
        while(q.size())
        {
            int u=q.front();
            q.pop();
            st[u]=0;
            for(int i=h[u];~i;i=ne[i])
            {
                int v=e[i];
                if(cycle[v])
                    continue;
                if(dist[v]-dist[u]>w[i])
                {
                    dist[v]=dist[u]+w[i];
                    if(!st[v])
                    {
                        st[v]=1;
                        times[v]++;
                        q.push(v);
                    }
                    if(times[v]>n)
                        cycle[v]=1;
                } 
            }
        }
    }
    int main()
    {
        cin>>T;
        for(int t=1;t<=T;t++)
        {
            idx=0;
            memset(h,-1,sizeof h);
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>abc[i];
            cin>>m;
            int a,b;
            while(m--)
            {
                cin>>a>>b;
                add(a,b);
            }
            spfa();
            cin>>q;
            printf("Case %d:
    ",t);
            while(q--)
            {
                cin>>a;
                if(dist[a]<3||dist[a]>=(int)1e9||cycle[a]) 
                    printf("?
    ");
                else 
                    printf("%d
    ",dist[a]);
            }
        }
    }
  • 相关阅读:
    将表中数据生成SQL语句
    遍历页面所有的控件
    MSN不能登陆
    刷新框架页
    JS传参出现乱码
    iframe攻击
    有关于VS调试Javascript的问题
    C#中StringBuilder类的使用
    前瞻XAML
    Asp.Net在SqlServer中的图片存取
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12236401.html
Copyright © 2011-2022 走看看