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\n",flag);
    }
    return 0;
}

zoj1857Fire Station最短路

时间: 2024-08-14 03:57:40

zoj1857Fire Station最短路的相关文章

poj2607Fire Station(floyd最短路)

题目链接: 啊哈哈,点我带我 这道题目当时一看觉得很熟悉,但是后来越想越混乱,搞得最后题目都没搞清楚...比赛的时候不知道怎么想的,但是大致思想是对的.... 题意: 这道题目是讲原来镇上有若干个加油站,但是镇上的居民觉得消防站的距离李自己家太远,所以决定在居民点键一个消防站,要使离居民点的最大距离最小.. 思路:毫无疑问是最短路...但是这题数据太多..所以预处理的时候用floyd求出两个 任意两点间的距离,然后用加油站去更新到到各个居民点的最短距离..那么枚举所有加油站后就会得到所有到居民点

PAT甲题题解-1072. Gas Station (30)-dijkstra最短路

题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平均值还是一样,就输出按照顺序排列加油站编号最小的. 分析:加油站之间也是彼此有路连接的,所以最短路径计算的时候也要把加油站算上,是双向边,所以边的数组大小得开两倍.加油站编号记为n+1~n+m,对这些点用dijkstra计算最短路径即可,这里顺便在dijkstra中进行了剪枝处理,不剪枝也没事. #

图论(A*算法,K短路) :POJ 2449 Remmarguts&#39; Date

Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, h

hdu 2448 Mining Station on the Sea【网络费用流】

Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2371    Accepted Submission(s): 732 Problem Description The ocean is a treasure house of resources and the development

poj2449:第k短路问题

Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story. "Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One

POJ 2502 Subway-经过预处理的最短路

Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of getting to ride your bike to school every day, you now get to walk and take the subway. Because you don't want to be late for class, you want to know

hdu 3339(最短路+01背包)

In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5135    Accepted Submission(s): 1710 Problem Description Since 1945, when the first nuclear bomb was exploded by the Manhattan Project t

最短路总结

最近过的最短路题目稍微总结一下,顺便写一下模板,最短路算法众多有floyd.dij.bell-man.spfa,速度最快就是dij+优先队列或者dij+堆排序,spfa理论上很快o(ke)但实际并不一定不过spfa传说中有一个很NB用处就是处理带负权回路. 邻接表VS邻接矩阵:根据写题经验,如果可以用矩阵那一定是首选,矩阵速度比表快而且题目出现多重边时矩阵很好解决. 今天不小心又遇见正向表与最短路图(HDU2433),感觉很兴奋哈,通宵刷题的感觉很好玩!遗憾的是hdu1385还没过,那是一题最短

HDU 4308 最短路或者bfs

Saving Princess claire_ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2435    Accepted Submission(s): 864 Problem Description Princess claire_ was jailed in a maze by Grand Demon Monster(GDM)