社区讨论
80pts求条 #6#7TLE
P2176[USACO11DEC] RoadBlock S / [USACO14FEB] Roadblock G/S参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mkrva20f
- 此快照首次捕获于
- 2026/01/24 13:26 4 周前
- 此快照最后确认于
- 2026/02/11 02:29 上周
玄关
CPP#include<bits/stdc++.h>
using namespace std;
int dis[105], pre[105], n, m, ans;
bool vis[105];
struct node{
int id, w;
bool operator <(const node &b) const{
return w > b.w;
}
};
struct edge{
int id, w;
};
vector<edge> g[105];
int dijk(){
memset(dis, 0x3f, sizeof dis);
memset(vis, 0, sizeof vis);
dis[1] = 0;
priority_queue<node> q;
q.push({1, 0});
while(q.size()){
int u = q.top().id, w = q.top().w;
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(auto it : g[u]){
if(dis[u] + it.w < dis[it.id]){
dis[it.id] = dis[u] + it.w;
pre[it.id] = u;
q.push({it.id, dis[it.id]});
}
}
}
return dis[n];
}
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
g[v].push_back({u, w});
g[u].push_back({v, w});
}
int fdis = dijk();
for(int now = n; now != 1; now = pre[now]){
int u = now, v = pre[now], w = 0;
for(auto &it : g[u]){
if(it.id == v){
w = it.w;
it.w <<= 1;
break;
}
}
for(auto &it : g[v]){
if(it.id == u){
it.w <<= 1;
break;
}
}
ans = max(ans, dijk() - fdis);
for(auto &it : g[u]){
if(it.id == v){
it.w >>= 1;
break;
}
}
for(auto &it : g[v]){
if(it.id == u){
it.w >>= 1;
break;
}
}
}
cout << ans;
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...