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;
    }
  • 相关阅读:
    face_recognition人脸识别框架
    POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)
    POJ 2392 Space Elevator(多重背包变形)
    POJ 1014 Dividing(多重背包, 倍增优化)
    POJ 1384 Piggy-Bank(完全背包)
    POJ 2063 Investment(完全背包)
    POJ 3211 Washing Cloths(01背包变形)
    POJ 1837 Balance(01背包变形, 枚举DP)
    POJ 2923 Relocation(01背包变形, 状态压缩DP)
    POJ 1243 One Person
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3915191.html
Copyright © 2011-2022 走看看