洛谷 P2185 公路通行税 题解

题目链接

洛谷 P2185 公路通行税

注意:输入格式第一句:输入文件中包含几组数据。
题目描述第三段:一年的公路印花的价值相当于在两个最远城市之间进行 \(100\) 次旅行所需的费用。

思路分析

一道最短路的题目。按题目要求建图,用 bfs+循环跑个多源最短路,再找到最远的可达的两点最短路长度。

代码呈现

#include<bits/stdc++.h>
using namespace std;

const int N=1010;
int n,m;
int dis[N][N];
vector<int> f[N];

void bfs(int st){ // 边权为 1 的单源最短路
    queue<int> q;
    q.push(st),dis[st][st]=0;
    while (!q.empty()){
        int u=q.front();q.pop();
        for (auto v:f[u]){
            if (dis[st][v]>dis[st][u]+1) dis[st][v]=dis[st][u]+1,q.push(v);
        }
    }
}
int main(){
    while (scanf("%d%d",&n,&m)!=EOF){
        if (n==0 && m==0) break;
        for (int i=1;i<=n;++i) f[i].clear(); // 多测不清空!!!
        for (int i=1;i<=m;++i){
            int u,v;scanf("%d%d",&u,&v);
            f[u].push_back(v),f[v].push_back(u);
        }
        memset(dis,0x3f,sizeof dis);
        for (int i=1;i<=n;++i) bfs(i);
        int ans=0;
        for (int i=1;i<=n;++i){
            for (int j=1;j<=n;++j){
                if (dis[i][j]!=0x3f3f3f3f) ans=max(ans,dis[i][j]);
            }
        }
        printf("%d\n",ans*100);
    }
    return 0;
}
posted @ 2026-01-31 16:52  CodingJuRuo  阅读(8)  评论(0)    收藏  举报