题目名称 | 2455. 基本的图问题 |
---|---|
输入输出 | basicgraph.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 7 |
题目来源 | mouse 于2016-09-09加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:85, 提交:198, 通过率:42.93% | ||||
Albert S. Chang | 100 | 0.236 s | 91.73 MiB | C++ |
rvalue | 100 | 0.243 s | 91.73 MiB | C++ |
CSU_Turkey | 100 | 0.356 s | 16.34 MiB | C++ |
Tanya | 100 | 0.380 s | 4.10 MiB | C++ |
胖周zzf | 100 | 0.384 s | 4.10 MiB | C++ |
HeHe | 100 | 0.401 s | 1.58 MiB | C++ |
白&夜 | 100 | 0.427 s | 39.98 MiB | C++ |
liuyu | 100 | 0.428 s | 118.57 MiB | C++ |
swttc | 100 | 0.458 s | 77.38 MiB | C++ |
Smile | 100 | 0.499 s | 15.95 MiB | C++ |
本题关联比赛 | |||
20160909 | |||
防止浮躁的小练习v0.5 | |||
测试 |
关于 基本的图问题 的近10条评论(全部评论) | ||||
---|---|---|---|---|
fa[i]=i能过,fa[a[i]]=a[i]过不了,玄学。。。ORZ
wfff
2018-07-06 20:02
12楼
| ||||
没读题就写了....我说为什么读入这么长...星级有点低吧,都有区间取最值和并查了...
| ||||
并查集初始化 F[ A[ i ] ] = A[ i ] 就W
改成 F[ i ] = i 就A ???
chs
2017-04-14 21:06
10楼
| ||||
莫名WA了2个点结果数组开大10倍就A了...
身败名裂... 以及这么大的数据为虾米泥萌都不用快读捏? 坐等被常数帝卡榜 | ||||
一直以为是线段树常数太大了,后来发现是Findroot写的太慢了
千世断魂自凝眉
2016-10-31 21:03
8楼
| ||||
回复 @飒 :
哇塞居然会O(nloglogn)的算法鶸渣在此膜拜神犇
AntiLeaf
2016-09-18 06:20
7楼
| ||||
一发RMQ, O(NlglgN)-O(lglgN),虽然看上去很慢
| ||||
| ||||
并查集判断是否联通大法好!!!
| ||||
我以为第二段数据给的s,e是直接有s到e的边...然后WA了一下身败名裂了。
|
图论是一门有趣且已应用于诸多领域的科学。当我们在解决一些复杂的问题时,我们常常可以建一个图的模型。利用这些模型,我们可以把问题简化并清楚该我们怎么去做。在图论中有很多有名的问题,像汉密尔顿回路,旅行商问题,邮差问题,等等。噢,上帝。它们对于大部分大学生来说都挺难的。别担心,在这个问题中我们只需要考虑一个小问题:图的连通性(啊哈,它对于你来讲足够简单^_^)
我们用(V,E)来表示图。V是G中所有节点的集合,N=|V|是G中节点的个数。E是G中所有边的集合,一条边可以用一个节点对(a1,a2)来表示,意味着a1和a2之间有一条边相连。
现在的问题是:给出一个图G,请求出任意两个节点是否连通(包括直接或间接)。
第一行包括一个整数n(1≤n≤100000),G中节点个数。接下来有n个不同的整数,每行一个Ai(1≤Ai≤n,1≤i≤n)。(我们用整数1到n表示G中节点)
A1(1≤A1≤n)
A2(1≤A2≤n)
............
An(1≤An≤n)
下一行包括一个整数m(1≤m≤500000),下面有m行,每行为一个建边命令,包括两个整数Si和Ei(1≤Si≤n,1≤Ei≤n,Si<Ei,1≤i≤m)
m
S1 E1 (1≤S1≤n,1≤E1≤n,S1<E1)
S2 E2(1≤S2≤n,1≤E2≤n,S2<E2)
............
Sm Em(1≤Sm≤n,1≤Em≤n,Sm<Em)
对于每一个i(1≤i≤m),从前面输入的N个有序结点序列中的[Si,Ei]范围内(即从输入的第Si个数至第Ei个数中)找到一个最小数Amin=min{As1,As2...Ae1}和一个最大数Amax=max{As1,As2…Ae1),然后在G中的结点Amin和Amax之间连一条边。
接下来一行包括一个整数K (1≤k≤100000), 下面有k个问题。
k
u1 v1 (1≤u1≤n,1≤v1≤n)
u2 v2 (1≤u2≤n,1≤v2≤n)
............
uk vk(1≤uk≤n,1≤vk≤n)
对于每个i(1≤i≤k),你需要回答ui和vi是否连通(包括直接或间接)。
你可以假设每个节点与它自身都是连通的,任意两个节点之间可能会有多条边相连。
输出文件有K行,其中在第i行如果ui和vi连通(包括直接或间接),你需要输出“YES”,否则输出“NO”。
5 2 3 5 4 1 3 2 3 3 5 1 2 3 3 1 5 1 4 5
YES YES NO
对于样例输入,共有5个节点顺序是2 3 5 4 1。有3条边:第一条的构建方式是:从输入的第2~3个结点{3,5}中找出最小数3,最大数5,在节点3和节点5间连一条边。同理,对于第二条边,在输入序列的第3~5范围内(即{5,4,1})中找出最小数1,最大数5,节点1和节点5也是直接有边相连的……
在此键入。