zoukankan      html  css  js  c++  java
  • poj1125 Stockbroker Grapevine

    数据貌似很水的样子。用了N次Dijkstra来计算每点到其他各点距离的最大值,时间复杂度还是蛮大的,结果也是0ms。

    英语不好伤不起啊,题目看了好久才知道在干嘛。

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<vector>
    #define MAXD 110
    #define INF 0x3f3f3f3f
    using namespace std;
    int N,data[MAXD][MAXD],d[MAXD];
    bool graph[MAXD][MAXD];
    
    class cmp
    {
        public:
        bool operator()(int a,int b)
        {
            return d[a]>d[b];
        }
    };
    
    void Dijkstra(int src)
    {
        priority_queue<int,vector<int>,cmp > que;
        bool vis[MAXD];
        memset(vis,0,sizeof(vis));
        memset(d,0x3f,sizeof(d));
        d[src]=0;
        que.push(src);
        int t;
        int i;
        while(!que.empty())
        {
            t=que.top();
            vis[t]=true;
            que.pop();
            for(i=1;i<=N;i++)
            {
                if(!vis[i]&&graph[t][i]&&d[i]>d[t]+data[t][i])
                {
                    d[i]=d[t]+data[t][i];
                    que.push(i);
                }
            }
        }
    }
    
    int max()
    {
        int i,ans=0;
        for(i=1;i<=N;i++)
        {
            if(ans<d[i])
            ans=d[i];
        }
        return ans;
    }
    int main()
    {
        //freopen("test.txt","r",stdin);
        while(scanf("%d",&N)!=EOF)
        {
            if(N==0)
            return 0;
            int i,j,m,t;
            memset(graph,0,sizeof(graph));
            for(i=1;i<=N;i++)
            {
                scanf("%d",&m);
                for(j=1;j<=m;j++)
                {
                    scanf("%d",&t);
                    scanf("%d",&data[i][t]);
                    graph[i][t]=true;
                }
            }
            int flag=0,ans=INF;
            for(i=1;i<=N;i++)
            {
                Dijkstra(i);
                if(ans>max())
                {
                    ans=max();
                    flag=i;
                }
            }
            if(flag==0)
            printf("disjoint\n");
            else
            printf("%d %d\n",flag,ans);
        }
        return 0;
    }
  • 相关阅读:
    C#中使用事务
    C#中执行数据库存储过程
    构建ASP.net的AJAX开发环境
    C#开发数据库技巧汇总
    索引的作用及其使用
    C#中的多态性
    C#中调用C++的DLL
    不借助其它变量交换两变量值
    ASP.NET页面间传值的9种方式
    TERSUS无代码开发(笔记11)TERSUS框架学习框架基本信息修改
  • 原文地址:https://www.cnblogs.com/longlongagocsu/p/2831695.html
Copyright © 2011-2022 走看看