ICode9

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

NWERC-2018 Brexit Negotiations 拓扑排序 思维

2020-10-01 19:34:06  阅读:318  来源: 互联网

标签:Brexit val int NWERC 会议 leq maxn 2018 拓扑


NWERC-2018 Brexit Negotiations 拓扑排序 思维

题意

有\(n\)个会议要开,一段时间只能开一个会议。

每个会议有两个要素:会议时间和前置会议。

当前会议必须在前置会议结束后才能开。

每个会议的时间 = 当前会议时间 + 第几个会议

给出\(n,e,q\) 表示\(n\)个会议,\(e\)为当前会议的时间,\(q\)表示有\(q\)个前置会议。

\[1\leq n\leq 4 \times 10^5\\ 1\leq e \leq 10 ^6 \\ \]

分析

图论套路题。

很容易想到要进行拓扑排序,当时交上去了一发,wa了。

于是找到原因,发现这样找很可能会因为拓扑序,贪心的时候把其他更大的时间留在了后面,这显然是不合理的。

因此考虑反向拓扑,这样每次贪心的找更小的时间,这样就能保证最后的点一定是最大的时间,就能贪心的给他最小的附加时间。

如果正向拓扑,我们只能保证最后的时间一定是最小的时间。

代码

int n;
vector<int> e[maxn];
int inDeg[maxn];
int v[maxn];
bool vis[maxn];

struct node {
    int id;
    int val;
    node(int _id,int _val) {
        id = _id;
        val = _val;
    }
    friend bool operator < (const node& a, const node& b) {
        return a.val > b.val;
    }
};

int topo() {
    priority_queue<node> q;
    int tot = n;
    int res = 0;
    for (int i = 1; i <= n; i++)
        if (!inDeg[i]) q.push(node(i, v[i]));
    while (!q.empty()) {
        node u = q.top();
        q.pop();
        tot--;
        res = max(res, u.val + tot);
        for (int i = 0; i < e[u.id].size(); i++) {
            int y = e[u.id][i];
            inDeg[y]--;
            if (!inDeg[y]) q.push(node(y, v[y]));
        }
    }
    return res;
}

int main() {
    n = readint();
    for (int i = 1; i <= n; i++) {
        int tmp = readint();
        v[i] = tmp;
        int q = readint();
        for (int j = 0; j < q; j++) {
            int u = readint();
            inDeg[u]++;
            e[i].push_back(u);
        }
    }
    Put(topo());
}

标签:Brexit,val,int,NWERC,会议,leq,maxn,2018,拓扑
来源: https://www.cnblogs.com/hznumqf/p/13758804.html

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

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

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

ICode9版权所有