CF366D Dima and Trap Graph 题解
题意
给定一张有 nnn 个节点,mmm 条边的无向图(可能有环或重边),对于每个节点 iii,有 lil_ili 和 rir_iri,定义在经过该节点后,只能携带于 lil_ili 和 rir_iri 之间的数。
从编号为 1 的节点出发(初始时携带了所有自然数),到达编号为 nnn 的节点,求最后能携带最多的节点。
若节点数相同,输出字典序小的那一组。
若节点数为 0,输出 Nice work, Dima!
。
题解
模拟赛的一道题。
二分 + 图。
二分本质:
在数轴上找到一个临界点,即点的左边都可以满足条件,右边都不可以满足条件(或左边不可以,右边可以)。
在这道题中,r 值是有单调性的。即有一临界点,使得比它小的 r 值无法满足,比它大的 r 值可以满足。
但是,l 不具有单调性。例如,当 l 值为 1 时可以满足,l 值为 5 时可以满足,但是 l 值为 3 时能否满足是无法直接断定的。
所以,r 的值可以通过二分得到,l 的值只能枚举而得。
以上是思路。
但实现的时候我们可以用并查集优化:
我们从小到大枚举 l 的值,在此基础上,我们按 r 的值从大到小枚举每一条边。
保证每一条使用了的边的 ei.le_i.lei.l 的值比当前枚举的 l 的值小。
这里就运用了二分的思想。
每用一条边,就用并查集维护,如果 f1=fnf_1 = f_nf1=fn,就记录答案,最终输出最佳答案即可。
代码
#include<bits/stdc++.h>
using namespace std;#define rint register int
const int inf = 1e6 + 5, maxn = 1005;
int n, m;
int cnt, hd[maxn];
struct node{int s, t;int l, r;
}e[maxn * 4];
int f[maxn];
int ansl, num;
int recl[maxn * 4];inline int read ()
{int x = 1, s = 0;char ch = getchar ();while (ch < '0' or ch > '9'){if (ch == '-') x = -1; ch = getchar ();}while (ch >= '0' and ch <= '9') s = s * 10 + ch - '0', ch = getchar ();return x * s;
}inline bool cmp (node a, node b)
{return a.r == b.r ? a.l < b.l : a.r > b.r;
}inline void init ()
{for (rint i (1); i <= n; ++i) f[i] = i;
}inline int find (int x)
{return f[x] == x ? x : find (f[x]);
}int main ()
{n = read (), m = read ();for (rint i (1); i <= m; ++i) e[i].s = read (), e[i].t = read (), e[i].l = read (), e[i].r = read (), recl[i] = e[i].l;sort (e + 1, e + m + 1, cmp);sort (recl + 1, recl + m + 1);for (rint i (1); i <= m; ++i){init ();bool flag = 0;int tl = recl[i], tr = inf;for (rint j (1); j <= m; ++j){if (e[j].l > tl) continue;int u = find (e[j].s), v = find (e[j].t);if (u != v){f[u] = v;tr = min (tr, e[j].r);if (find (1) == find (n)) {flag = 1;break;}}}if (flag and num < tr - tl + 1) ansl = tl, num = tr - tl + 1;}if (num == 0){printf ("Nice work, Dima!");return 0;}printf ("%d\n", num);return 0;
}
CF366D Dima and Trap Graph 题解相关推荐
- D - 8 Puzzle on Graph题解
atcoder上的一题,感觉挺有意思的就写一下题解,别问我为什么当时没做出来,因为我C题(暴力枚举判断三角形)写爆了,*****,掉大分. 题目链接:D - 8 Puzzle on Graph (at ...
- czl蒻蒟的OI之路10、11、12
好久没有发微博了表示自己也很绝望啊今天来个三连击 XJOI奋斗群蒻蒟群群赛11 RANK排名11 T1The Wall WA一次后AC 题意 分析过程 给出题解 T2Maximal Area Quad ...
- Codeforces 题目合集+分类+代码 【Updating...】【361 in total】
961A - Tetris 模拟 ...
- 『题解』LibreOJ #563. Snakes 的 Naïve Graph
#563. 「LibreOJ Round #10」Snakes 的 Naïve Graph Description 有一张二分图 G(m)G(m)G(m),其中有 (m−1)(m - 1)(m−1) ...
- 【最短路】Graph practice T2 drive 题解
Problem 2. drive Input file: drive.in Output file: drive.out Time limit: 2 second 工头cky 最近开了一家贸易公司,开 ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
- HDU 6090 Rikka with Graph
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...
- Codeforces 724 G Xor-matic Number of the Graph 线性基+DFS
G. Xor-matic Number of the Graph http://codeforces.com/problemset/problem/724/G 题意:给你一张无向图.定义一个无序三元组 ...
最新文章
- 启动计算机加密码,电脑给硬盘设置启动密码加密的方法
- 前端测试简述及使用Karma/Mocha实现的集成测试栗子(Travis CI/Coverage)
- mysql 输出当前月所有日期与对应的星期
- Vs2010 MFC 简单制作过程中的问题
- Knative 多容器支持介绍
- linux服务器怎么防,Linux服务器防攻击的各种方案
- 网友评论:Struts漏洞为什么来势凶猛
- 关于id Tech5的MegaTexture技术
- SharePoint 权限提升(SPSecurity)
- Python基本输出函数print()用法小结
- ids和ips主要区别在于_接口测试和功能测试的区别
- 机器学习回归问题解答
- SkyWalking加入Apache孵化器
- Struts中ActionActionForm
- IsKindOf的用法简介
- ESP8266串口透传+WiFi储存+OTA+smartconfig/airkiss
- 关于OSGI中的Felix热插拔技术
- 思维模型 第一性原理
- UE4在Android平台调试
- 网站学习心得-登陆注册功能
热门文章
- 萧乾升:3.25黄金白银TD实时最新行情走势分析
- 量化投资常用技能——指标篇3:详解RSI指标,及其代码实现和绘图
- Redhat6.5离线配置Zabbix,含自定义Zabbix监控项
- CMA实验室盲样考核,如何控制质量?
- Python编程:从入门到实践 课后习题-第十一章 测试代码
- hashmap扩容过程,字节大神强推千页PDF学习笔记,经典好文
- 磁链观测器结合霍尔传感器转子角度方案
- 胆囊有排毒鸿蒙那,胆生病,别怕!身上有反射区,专“治”胆病,结石、炎症绕道走...
- IT行业应届毕业生的简历改怎么写?
- java计算机毕业设计教学质量测评系统源码+系统+lw+数据库+调试运行