洛谷 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;
}

浙公网安备 33010602011771号