zoukankan      html  css  js  c++  java
  • zoj1857Fire Station最短路

      乱搞题。就是输入有点问题,我开始用的 scanf("%d%d%d",&a,&b,&c) !=EOF 然后就妥妥的秒wa 但是poj 莫名奇妙的过了,这时Gxwar 告诉我zoj我过不了,然后我就过不了。。。可是改了下输入就过了。真是神奇。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <map>
    #include <cstdlib>
    #include <list>
    #include <set>
    #include <queue>
    #include <stack>
    #include<math.h>
    using namespace std;
    int dis[555];
    int dist[555];
    int Map[555][555];
    const int INF=0xfffffff;
    int m;
    void floyd()
    {
        for(int k=1;k<=m;k++)
        for(int i=1;i<=m;i++){
            for(int j=1;j<=m;j++){
                Map[i][j]=min(Map[i][j],Map[i][k]+Map[k][j]);
            }
        }
    }
    
    void spfa(int x)
    {
        int vis[555];
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=m;i++) dist[i]= dis[i];
        queue<int> q;
        q.push(x) ; dist[x]= 0 ;vis[x]=1;
        while(!q.empty()){
            int cur= q.front() ;q.pop();
            vis[cur]=0;
            for(int i=1;i<=m;i++){
                if(dist[i]>dist[cur]+Map[cur][i]){
                    dist[i]=dist[cur]+Map[cur][i];
                    if(!vis[i]){
                        vis[i]=1;q.push(i);
                    }
                }
            }
        }
    }
    int main()
    {
        int n;int a,b,c;
        int val[555],vis[555];
        char str[100];
        while(scanf("%d%d",&n,&m)!=EOF){
            memset(vis,0,sizeof(vis));
            memset(val,0,sizeof(val));
            for(int i=1;i<=m;i++)
            for(int j=1;j<=m;j++)
            if(i==j) Map[i][j]=0;else Map[i][j]=INF;
            for(int i=1;i<=m;i++)
                dis[i]=INF;
            for(int i=0;i<n;i++){
                scanf("%d",&val[i]);vis[val[i]]= 1; dis[val[i]]= 0;
            }
            getchar();
            while(gets(str)&&strlen(str)){
                sscanf(str,"%d%d%d",&a,&b,&c);
                Map[a][b]=Map[b][a]=c;
            }
            floyd();
            for(int i=0;i<n;i++){
                for(int j=1;j<=m;j++){
                    if(vis[j]) continue;
                    if(dis[j]>Map[val[i]][j]) dis[j] = Map[val[i]][j];
                }
            }
            for(int i=0;i<n;i++){
                dis[val[i]]=0;
            }
            int Max=0;
            for(int i=1;i<=m;i++)
                if(dis[i]>Max) Max= dis[i];
            int flag=1;
            for(int i=m;i>=1;i--){
                if(vis[i]) continue;
                int Max1=0;
                spfa(i);
                for(int j=1;j<=m;j++){
                    if(vis[j]) continue;
                    if(dist[j]>Max1) Max1=dist[j];
                }
                if(Max1<=Max){
                    Max= Max1; flag= i;
                }
    
            }
            printf("%d
    ",flag);
        }
        return 0;
    }
  • 相关阅读:
    7.9 C++ STL算法
    7.8 C++容器适配器
    7.7 C++基本关联式容器
    Django项目静态文件加载失败问题
    Centos6.5安装mysql5.7详解
    使用Xshell上传下载文件
    linux中MySQL本地可以连接,远程连接不上问题
    Linux常用命令
    Linux环境安装python3
    python 字符串最长公共前缀
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3915191.html
Copyright © 2011-2022 走看看