首页 > 其他分享 >2024湖南省赛题解(不全)

2024湖南省赛题解(不全)

时间:2024-10-30 10:20:06浏览次数:5  
标签:int 题解 不全 st 2024 vector dist1 heap dist2

湖南省赛


K题

题意

你可以免费移动经过一条边,求在满足在任意点开始都能成功渡劫的最小花费。


思路

  1. 建一个虚拟源点,连向每一个点,将这条边的边权设为这个点渡劫需要的花费。
  2. 跑最短路,这样会把每一种情况囊括在内,但是没有考虑免费的移动。
  3. 建一个 dist2 数组,用来记录每一个点当前真正的最小花费(已用免费次数),类似状态转移。
  4. 每一次对 dist1[u]dist2[v] + w 和本身取 min 进行更新。
  5. 最后遍历 dist2 数组取 max 即为答案。

代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    #define int long long
    
    int n, m;
    cin >> n >> m;
    
    vector<vector<pair<int, int>>> g(n + 1);
    int INF = 2e18;
    vector<int> dist1(n + 1, INF), dist2(n + 1, INF);
    
    while (m--) {
        int a, b, c;
        cin >> a >> b >> c;
        g[a].emplace_back(b, c);
        g[b].emplace_back(a, c);
    }
    
    vector<int> a(n + 1);
    int minn = INF;
    int st = 0;
    
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        dist2[i] = a[i]; // 初始化
    }
    
    for (int i = 1; i <= n; i++) {
        g[0].emplace_back(i, a[i]);
    }
    
    vector<int> f(n + 1);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> heap;
    dist1[st] = 0;
    dist2[st] = 0; // dist1 记录不用,dist2 记录用免费的,也就是当前最小
    int ans = 0; // 要取 max
    
    heap.emplace(dist1[st], st);
    
    while (heap.size()) {
        auto [d, u] = heap.top();
        heap.pop();
        
        if (f[u]) continue;
        f[u] = 1;
        
        for (auto [v, w] : g[u]) {
            if (dist1[v] > dist1[u] + w) { // 算出到上一个的消耗
                f[u] = 0;
                dist1[v] = min({dist1[u] + w, dist1[v]});
                heap.emplace(dist1[v], v);
            }
            if (u) dist2[v] = min({dist1[u], dist2[u] + w, dist2[v]}); // 更新每个点的最小能量
        }
    }
    
    for (int i = 1; i <= n; i++) {
        ans = max(ans, dist2[i]);
    }
    
    cout << ans << '\n';
}

标签:int,题解,不全,st,2024,vector,dist1,heap,dist2
From: https://www.cnblogs.com/zhiliye/p/18515293

相关文章

  • 【2024-10-29】提还房贷
    20:00如果一个人认为自己幸福,他就足够幸福了。                                                 ——德·拉·费耶特夫人何太前段时间讨论起了提前还房货这事。一下子......
  • 多校A层冲刺 NOIP2024 模拟赛 15
    多校A层冲刺NOIP2024模拟赛15T1追逐游戏(chase)签到题注意到三个点构成的树就是全部路径,找到交汇点(两两lca中dep最大的那个),分讨能否在终点前追上即可。时间复杂度为\(O(nlogn)\)T2统计哈希,差分维护每个值的前缀个数,发现合法段的两个前缀个数的形态一致,只是整体会多......
  • 网络安全(黑客)——自学2024
    ......
  • 网络安全(黑客)——自学2024
    ......
  • [一直更新中]一句话题解
    目录一句话题解2024.10.29AT_abc290_fAT_arc156_c2024.10.30P5749[IOI2019]排列鞋子AT_abc285_e一句话题解不能什么题都随便写写就过了,留点印象好一点。一直更新。2024.10.29AT_abc290_f组合数数。满足树的形态要有\(\sumdeg_i=2n-2\)。考虑目前有\(k\)个儿子节点,直径......
  • 易优cms系统报错unserialize(): Error at offset 0 of 1571 bytes_Eyoucms系统报错问
    解决方案清除缓存通过FTP访问服务器。导航至 /data/runtime 目录。删除该目录下的所有文件和文件夹。升级系统登录后台。检查是否有可用的更新。升级到最新版本,以确保已知的问题已被修复。检查代码如果问题仍然存在,可以检查 \corelibrary\think\cache\dri......
  • Educational Codeforces Round 171 (Rated for Div. 2) 10.28 ABCD题解
    EducationalCodeforcesRound171(RatedforDiv.2)10.28(ABCD)题解A.PerpendicularSegments数学(math)计算几何(geometry)题意:给定一个\(X,Y,K\)。需要求解出二维坐标系中的四个点\(A,B,C,D\),满足:\(0\leqA_x,B_x,C_x,D_x\leqX\),\(0\leqA_y,B_y,C_y,D_y\leqY\)。并......
  • 20241029
    T116248岛屿首先,手模发现任意操作一次即可构造出一组解。于是这题其实是构造题。发现限制等价于每个三角形中两种颜色的边都存在。我们先考虑最外层的一个三角形,也就是一个度数为\(2\)的的点所在的三角形。要保证它里面两种颜色的边都存在,最简单的办法就是把它的两个度数染......
  • 2024.10.29模拟赛
    今天照常7:45开始打模拟赛,11:45时结束。打了T1的40分暴力、T3的20分暴力,没有注意到T4的特殊样例可以骗分(悲),最后以60分收尾。总结一下,没有挂分,但也没和正解挨上边,算是不好也不坏吧。订题时我看着T126行的AC代码陷入了沉思。三个人,想了至少三个小时,结果全没想出来,于是来整理一下今......
  • CCSP2024 游记
    目录Day-1Day0Day1Day2Day3Day-1爆肝Web实验中。日常厌学,但是想到马上就出去旅游了,心情不算太坏。一看名单发现去的全是ACM校队的,去年也是这个样子,他妈的难道CCSP是校队的什么旅游团建吗!Day0早上七点起来赶高铁,妈的一打开手机发现立青六点多给我发消息妈的居然......