旅游景点 并查集
来源:互联网 发布:是大腿淘宝店 编辑:程序博客网 时间:2024/04/24 20:39
【问题描述】
liouzhou_101 住在柳侯公园附近,闲暇时刻都会去公园散散步。
很那啥的就是,柳侯公园的道路太凌乱了,假若不认识路就会走着走着绕回原来的那条路。
liouzhou_101 就开始自己YY,假若给他当上那啥管理者,就会想尽量减少道路回圈的个数,但是大
范围的改变道路终归不是什么良策。
经过调查,发现公园有N 个景点,为了显示景点之间的优越性,我们按照1,2,…,N 来把这N 个
景点编号,当然编号越小就说明越重要。
为了显示自己的英明决策,liouzhou_101 决定,前K 重要的景点最为重要,当然他们是标号为1…
K 了的。需要保证这K 个景点不在任何一个环上,原因很简单,这前K 个景点是很重要的景点,参
观的人也很多,自然不会希望参观的人因为在兜圈子而迷路吧。
于是,我们所能够做的就是把之前建造好的一些道路清除掉,使得保证前K 重要的景点不在任何一
个环上。
【文件输入】
第一行包括三个正整数N,M 和K,N 表示景点的数量,M 表示公园里的路径条数,K 表示前K 个
景点最为重要。
再接下来M 行,每行有两个正整数x 和y,表示景点x 和景点y 之间有一条边。
【文件输出】
仅一行,输出至少去除多少条路径,使得前K 个重要的景点不在任何一个环上。
【样例输入】
11 13 5
1 2
1 3
1 5
3 5
2 8
4 11
7 11
6 10
6 9
2 3
8 9
5 9
9 10
【样例输出】
3
【提示】
我们的删边方案是,删除(2,3)(5,9)(3,5)这三条边,这样节点1 到5 都不在任何一个环上。
liouzhou_101 住在柳侯公园附近,闲暇时刻都会去公园散散步。
很那啥的就是,柳侯公园的道路太凌乱了,假若不认识路就会走着走着绕回原来的那条路。
liouzhou_101 就开始自己YY,假若给他当上那啥管理者,就会想尽量减少道路回圈的个数,但是大
范围的改变道路终归不是什么良策。
经过调查,发现公园有N 个景点,为了显示景点之间的优越性,我们按照1,2,…,N 来把这N 个
景点编号,当然编号越小就说明越重要。
为了显示自己的英明决策,liouzhou_101 决定,前K 重要的景点最为重要,当然他们是标号为1…
K 了的。需要保证这K 个景点不在任何一个环上,原因很简单,这前K 个景点是很重要的景点,参
观的人也很多,自然不会希望参观的人因为在兜圈子而迷路吧。
于是,我们所能够做的就是把之前建造好的一些道路清除掉,使得保证前K 重要的景点不在任何一
个环上。
【文件输入】
第一行包括三个正整数N,M 和K,N 表示景点的数量,M 表示公园里的路径条数,K 表示前K 个
景点最为重要。
再接下来M 行,每行有两个正整数x 和y,表示景点x 和景点y 之间有一条边。
【文件输出】
仅一行,输出至少去除多少条路径,使得前K 个重要的景点不在任何一个环上。
【样例输入】
11 13 5
1 2
1 3
1 5
3 5
2 8
4 11
7 11
6 10
6 9
2 3
8 9
5 9
9 10
【样例输出】
3
【提示】
我们的删边方案是,删除(2,3)(5,9)(3,5)这三条边,这样节点1 到5 都不在任何一个环上。
而且可知删除三条边已经是最少的了。
30%的数据,满足N≤10,M≤20;
60%的数据,满足N≤1,000,M≤10,000;
100%的数据,满足N≤100,000,M≤200,000。
注意:给出的无向图可能有重边和自环。
【时限】
1s
直接并查集乱搞。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define maxn 210000using namespace std;int n,m,k,ans;int x[maxn],y[maxn],fa[maxn];bool vis[maxn];int getfather(int xx){ if(fa[xx]==xx) return xx; fa[xx]=getfather(fa[xx]);return fa[xx];}int main(){ freopen("tou.in","r",stdin); freopen("tou.out","w",stdout); scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) scanf("%d %d",&x[i],&y[i]); memset(vis,false,sizeof(vis)); for(int i=1;i<=m;i++) if(x[i]>k&&y[i]>k) { fa[getfather(x[i])]=getfather(y[i]); vis[i]=true; } ans=0; for(int i=1;i<=m;i++) if(!vis[i]) { if(getfather(x[i])==getfather(y[i])) ans++; else fa[getfather(x[i])]=getfather(y[i]); } printf("%d\n",ans); return 0;}
0 0
- 旅游景点 并查集
- 旅游景点 (并查集)
- 旅游景点
- 旅游景点
- HDU3938 并查集 并查集
- 并查集(集并查)
- HDU1232 并查集<并>
- 并查集
- 数据结构-并查集
- 并查集
- 并查集!
- 并查集
- 并查集
- 并查集
- 并查集
- 并查集总结
- 并查集学习
- 并查集
- 如何化解云应用中数据泄露之险?
- NFC冠军 - OMNI市酒店拉斯科利纳斯
- NFC冠军 - 全方位曼德勒酒店拉斯科利纳斯
- UVA - 539 The Settlers of Catan (回溯水题)
- Asoc声卡驱动移植
- 旅游景点 并查集
- NFC RFID卡用于读取与iPhone或Android
- NFC - 什么
- Key-Value Observing机制 学习
- Nexus S的第一个多次电话,他说,恩智浦的NFC
- ubuntu 14.04 编译安装 vim7.4
- 类似余额宝数值增加的动画
- 安卓系统可删程序列表
- 打印调试技术 printk klogd dmesg