Codeforces Round #791(Div 2)——D
D
题意:
给定一个有向图,每个点有自己的点权,求一条长度为K的路径使得路径上的最大点权最小,输出该条路径上的最大点权。
思路:(二分+拓扑排序)
最小值最大的题考虑二分解决。
我们每次二分答案为mx,以此判断有没有某条路径的最大值为mx且长度为k。因为我们要保证二分出来的mx是该条路径上最大的点权,所以所有大于mx的点我们都要舍弃。
其次如果路径中含环那必然是可以的,如果不含吗,就需要判断是否存在长度为k,最大值为mx的路径
举个例子:
最初的图 
当k == 4时,当我们判断mid = 4(既mx=4)时,则存在这样一条路径

chick返回true
判断环的时候可以通过拓扑排序来判断
在chick的时候需要注意的是,因为我们每次取的是小于等于mx的点,所以每次每个点的入度都不同,都需要重新统计
1 const int N = 2e5 + 10,INF = 0x3f3f3f3f3f;
2 int n, m, k, w[N];
3 vector<int> g[N];
4 int vis[N], deg[N], deep[N];/*vis判断是否小于等于mx,deg统计入度,deep统计路径长度*/
5 vector<pair<int, int> >e;
6
7 bool chick(int mx) {
8 for (int i = 1; i <= n; ++i) vis[i] = 0, deg[i] = 0, deep[i] = -INF;
9 for (int i = 1; i <= n; ++i) {
10 if (w[i] <= mx)vis[i] = 1;
11 }
12 for (auto it : e) {
13 if (w[it.first] <= mx && w[it.second] <= mx) {
14 deg[it.second]++;
15 }
16 }
17 queue<int> q;
18 for (int i = 1; i <= n; ++i ) {
19 if (vis[i] && !deg[i])q.push(i),deep[i] = 1;
20 }
21 while (q.size()) {
22 int u = q.front();
23 q.pop();
24 for (int s : g[u]) {
25 if (!vis[s]) continue;
26 deep[s] = max(deep[s], deep[u] + 1);
27 if (deep[s] >= k) return 1;
28 deg[s]--;
29 if (deg[s] == 0) q.push(s);
30 }
31 }
32 for (int i = 1; i <= n; ++i) {
33 if (vis[i] && deg[i] > 0)return 1;
34
35 }
36 return 0;
37 }
38
39 void solve() {
40 cin >> n >> m >> k;
41 for (int i = 1; i <= n; ++i) cin >> w[i];
42 for (int i = 1; i <= m; ++i) {
43 int x, y;
44 cin >> x >> y;
45 g[x].push_back(y);
46 e.push_back({x, y});
47 }
48 if (k == 1) {
49 cout << *max_element(w + 1, w + 1 + n) << endl;
50 return;
51 }
52 int ans = INF;
53 int l = 0, r = 1e9 + 1;
54 for (int i = 1; i <= 50; ++i) {
55 int mid = (l + r) >> 1;
56 if (chick(mid)) {
57 ans = min(ans, mid);
58 r = mid - 1;
59 } else l = mid + 1;
60 }
61 if (ans == INF) {
62 cout << -1 << endl;
63 } else cout << ans << endl;
64 }
Codeforces Round #791(Div 2)——D的更多相关文章
- Codeforces Round #791 (Div. 2) A-C
Codeforces Round #791 (Div. 2) A-C A 题目 https://codeforces.com/contest/1679/problem/A 题解 思路 知识点:数学,暴 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
随机推荐
- HMS Core Discovery第17期回顾|音随我动,秒变音色造型师
HMS Core Discovery第17期直播<音随我动,秒变音色造型师>,已于8月25日圆满结束,本期直播我们邀请了HMS Core音频编辑服务的产品经理.技术专家以及创新娱乐类应用& ...
- QtCreator使用AStyle配置VS默认编辑代码风格
基础配置和下载 基础配置和下载,随便找一个教程就行 下面贴出我的配置 --style=allman indent=spaces=4 indent-switches indent-preproc-blo ...
- VS2017Enterprise版本安装ImageWatch 2017问题解决
按照Andrei给的方法并不一定能成功. 方法如下: 1. Download the extension (ImageWatch.vsix) and open it using WinRAR 2. F ...
- 第七十八篇:写一个按需展示的文本框和按钮(使用ref)
好家伙, 我们又又又来了一个客户 用户说: 我想我的页面上有一个搜索框, 当我不需要他的时候,它就是一个按钮 当我想要搜索的时候,我就点一下它, 然后按钮消失,搜索框出现, 当我在浏览其他东西时,这个 ...
- 第七十四篇:Vue组件父子传值
好家伙, 1.组件之间的关系 在项目开发中,组件之间的最常见关系分为如下两种: (1)父子关系 (2)兄弟关系 2.父子之间的数据共享 (1)父->子共享数据 父组件向子组件共享数据需要使用自定 ...
- KingbaseES V8R6集群同步模式synchronous参数配置详解
如下图所示: 集群数据同步原理说明: synchronous参数配置测试: 集群节点信息: ID | Name | Role | Status | Upstream | repmgrd | PID | ...
- KingbaseES V8R6C5B041手工创建集群测试案例
案例说明: KingbaseES V8R6C5B041版本和以前的KingbaseES R6有一定的区别,增加了"securecmdd"的工具,并且在install.conf配 ...
- Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式
一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...
- Sync包
sync同步包 Mutex互斥锁: 能够保证在同一时间段内仅有一个goroutine持有锁,有且仅有一个goroutine访问共享资源,其他申请锁的goroutine将会被阻塞直到锁被释放.然后重新争 ...
- 优化器Optimal
未完成!!!!!! 神经网络的训练主要是通过优化损失函数来更新参数,而面对庞大数量的参数的更新,优化函数的设计就显得尤为重要,下面介绍一下几种常用的优化器及其演变过程: [先说明一下要用到符号的含义] ...