背景

“扫地”杯III NOIP2012模拟赛 day2 第二题

描述

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个重要的景点不在任何一个环上。

测试样例1

输入

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。
注意:给出的无向图可能有重边和自环。

Marek Cygan

题目大意
要求前k个点不在环上 至少删几条边
题解
并查集
在kruskal算法当中,当这条边两个顶点的祖先相等时表示这两个点已经连通,再加入这条边就形成了环。
我们依次加边,加入这条边会形成环(即边的两个顶点已经连通)并且两个顶点存在编号小于k时,删去这条边。
然鹅 这是不对的,如果加入一条边形成环但边的顶点大于k 但是小于k的点却在这个环中,却要删去这条边。我们
可以先加入顶点大于k的边 最后再加顶点小于k的边。MMP我给点的编号从大到小排了个序依次加入就都WA了,╭(╯^╰)╮
代码
AC
#include<iostream>
#include<cstdio>
#define maxn 100005
using namespace std; int n,m,k,x,y,cnt,ans,fa[maxn];
struct Edge{
int x,y;
}edge[maxn<<]; int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} int f(int x){
return fa[x]==x?x:fa[x]=f(fa[x]);
} int main(){
n=read();m=read();k=read();
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++){
x=read();y=read();
if(x>k&&y>k){
int fx=f(x),fy=f(y);
if(fx!=fy)fa[fx]=fy;
}else
edge[++cnt].x=x,edge[cnt].y=y;
}
for(int i=;i<=cnt;i++){
int fx=f(edge[i].x),fy=f(edge[i].y);
if(fx==fy)ans++;
else fa[fx]=fy;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. matlab的try/catch语句
  2. 纯css3圆角下拉菜单 都没敢用js
  3. IOS 今天学到太多的知识了,赶快记录下来
  4. SQL 数据库 right join 和left join 的区别
  5. 【官方方法】xcode7免证书真机调试
  6. 百度地图API 学习网站
  7. Windows Phone 7 中拷贝文件到独立存储
  8. 【MINA】OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor的事件监听线程池的选择
  9. [转]jQuery源码分析系列
  10. (转)linux bash shell 入门教程
  11. JMeter创建FTP测试
  12. 擅长排列的小明 II(找规律)
  13. QML Image得到的图片资源路径的详细信息
  14. Python的@符号
  15. Android初级教程:屏幕分辨率
  16. XBMC源代码分析 6:视频播放器(dvdplayer)-文件头(以ffmpeg为例)
  17. 【转】W3C中国与百度联合组织移动网页加速技术研讨会
  18. 机器学习技法笔记:01 Linear Support Vector Machine
  19. Linux设置和查看环境变量的方法 详解
  20. linux2.6.30.4内核移植(3)&mdash;&mdash;yaffs文件系统移植

热门文章

  1. java性能监控工具jstat-windows
  2. Android开发——进程间通信之AIDL(二)
  3. Django-extra的用法
  4. kubernetes之故障排查和节点维护(二)
  5. iperf3 测试路由器吞吐率
  6. 02 php生成xml数据
  7. 基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
  8. Eclipse-----Eclipse断点调试
  9. iOS9新特性之泛型
  10. android studio 程序真机执行中文显示乱码