ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[CF1693C]Keshi in Search of AmShZ 题解

2022-07-01 13:34:48  阅读:159  来源: 互联网

标签:Search int 题解 Keshi maxn define 天内 deg


传送门QAQ

参考题解

Analysis

这题一眼看上去整的跟概率一样,导致我压根不想做(概率渣

但是我们可以分析一下:在 \(d\) 天内走到 \(n\) 点的条件是什么?

设点 \(x\) 到达 \(n\) 的最小天数为 \(d_x\)。

考虑 \(x\) 点的出边为 \((x,y_i)\),用 \(d_{y_i}\) 更新 \(d_x\)。

如果我们想走 \(y_i\),就必须把 \(d_{y_j}\) 更大的 \((x,y_j)\) 全部封锁,否则无法在 \(d_x\) 天内走到 \(n\)。

而 \(d\) 值更小的其它 \(y_k\) 我们是不用封锁的,因为走这些边也能在 \(d_x\) 天内走到。

所以,将所有的 \(y\) 按照 \(d_y\) 大小升序排序,就能依次用 \(d_{y_i} + deg_x- i\) 更新 \(d_x\)。

因为要先知道 \(d_y\) 再知道 \(d_x\),不妨建反图,从 \(n\) 反推回 \(1\),图中用类似 dijkstra 的方法不断让 \(d_x \gets d_y+deg_x\),每更新一次 \(deg_x \gets deg_x-1\) 即可。

最后的答案即为 \(d_1\)。

时间复杂度同 dijkstra,为 \(O(N\log N)\)。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
typedef pair<int,int> pa;
#define pb emplace_back
#define mp make_pair
#define fir first
#define sec second
int d[maxn],deg[maxn];
bool vis[maxn];
const int INF = 0x3f3f3f3f;
vector<int> g[maxn];
priority_queue<pa,vector<pa>,greater<pa> > q;
int n,m;
int main() {
    scanf("%d%d",&n,&m);
    for(int i = 1;i <= m;++ i) {
        int u,v;
        scanf("%d%d",&u,&v);
        ++ deg[u];
        g[v].pb(u);
    }
    for(int i = 1;i <= n;++ i)d[i] = INF;
    d[n] = 0;
    q.push(mp(d[n] , n));
    while(!q.empty()) {
        int u = q.top().sec;
        q.pop();
        if(vis[u])continue ;
        vis[u] = true;
        for(auto v : g[u]) {
            if(d[v] > d[u] + deg[v]) {
                d[v] = d[u] + deg[v];
                q.push(mp(d[v] , v));
            }
            -- deg[v];
        }
    }
    printf("%d",d[1]);
    return 0;
}

完结撒花✿✿ヽ(°▽°)ノ✿

标签:Search,int,题解,Keshi,maxn,define,天内,deg
来源: https://www.cnblogs.com/663B/p/16434288.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有