zoukankan      html  css  js  c++  java
  • [CF449B] Jzzhu and Cities

    Description

    (n) 个点 (m) 条边的无向图,另有 (k) 条特殊边连接 (1-i),问最多删除多少条特殊边,使得每个点到 (1) 的最短距离不变。

    Solution

    考虑先计算到每个点的最短路条数,然后判断。

    如果 (1 o i) 有特殊边,若特殊边长度 (>) 距离,那么显然这条特殊边没有贡献,直接删除。若等于距离,并且最短路条数 (>1),则删除这条特殊边,并将最短路条数 (-1)

    注意这里 (-1) 以后我们并不需要去考虑它对其它的点的影响。

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    int n, m, k, d[N], h[N], spec[N][3], cnt[N], vis[N];
    
    vector<pair<int, int>> g[N];
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> que;
    
    void make(int u, int v, int w)
    {
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }
    
    signed main()
    {
        cin >> n >> m >> k;
        int t1, t2, t3;
        for (int i = 1; i <= m; i++)
        {
            cin >> t1 >> t2 >> t3;
            make(t1, t2, t3);
        }
    
        for(int i=1;i<=k;i++)
        {
            cin>>t1>>t2;
            make(1,t1,t2);
            spec[i][1]=t1;
            spec[i][2]=t2;
        }
    
        memset(d, 0x3f, sizeof d);
        d[1] = 0;
        que.push({0, 1});
    
        while (que.size())
        {
            int p = que.top().second;
            que.pop();
            if (vis[p] == 0)
            {
                vis[p] = 1;
                for (auto pr : g[p])
                {
                    int q = pr.first, w = pr.second;
                    if (d[q] == d[p] + w)
                        ++cnt[q];
                    if (d[q] > d[p] + w)
                    {
                        cnt[q] = 1;
                        d[q] = d[p] + w;
                        que.push({d[q], q});
                    }
                }
            }
        }
    
        int ans = 0;
        for (int i = 1; i <= k; i++)
        {
            if (d[spec[i][1]] < spec[i][2])
                ++ans;
            else if (d[spec[i][1]] == spec[i][2] && cnt[spec[i][1]] > 1)
                ++ans, --cnt[spec[i][1]];
        }
    
        cout << ans << endl;
    }
    
  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/mollnn/p/14095591.html
Copyright © 2011-2022 走看看