【题解】
2025-07-30 17:59:10
发布于:广东
18阅读
0回复
0点赞
这个人怎么能越狱呢,居心叵测,我们先不鸟他。
这一题其实就是经典最短路算法的变式。松弛的方法从原来的累加变成了比大小而已。不过要注意的一点是在改完后因题目要求的是最大不是最小,所以初始化和原来的不同。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5;
const int INF = 0x3c;
vector<pair<int,int> > g[N];
int dist[N];
//此地无需初始化为无穷,因为题目要求的是最大而不是最小
int main(){
int n,s = 1;
cin >> n;
int u,v,w;
while(1){
cin >> u >> v >> w;
if(u == 0 and v == 0 and w == 0) break;
g[u].push_back({v,w});
}
queue<int> q;
dist[s] = 0x3c3c3c3c;
//毕竟第一个牢房无任何条件,这里初始化为正无穷后面更好处理
q.push(s);
while(!q.empty()){
int ip = q.front();
q.pop();
for(auto node : g[ip]){
int v = node.first,w = node.second;
if(dist[v] < min(dist[ip],w)){//唯一改动,把累加换成求最小
dist[v] = min(dist[ip],w);
q.push(v);
}
}
}
for(int i = 2;i <= n;i ++){
cout << dist[i] << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个