codevs1955光纤通信(并查集)
/*
第一眼以为就是个区间覆盖
然后敲完提交60分0.0 然而觉得自己的做法很对
以为数据错了 后来发现XXX他的牛棚是一圈(牛过得挺好的啊 还能赏湖...)
然后枚举断开的点 可惜n=750 p=10000 这组数据TLE了 1.3秒的样子 90分
后来看题解说可以并查集 觉得好有道理的样子 0.0
下面是两次的代码
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 10010
using namespace std;
struct node
{
int l,r;
}boy[maxn];
int cmp(const node &x,const node &y)
{
if(x.l==y.l)return x.r<y.r;
return x.l<y.l;
}
int n,p,k,ans,minn=;
int main()
{
scanf("%d%d",&n,&p);
int x,y;
for(int i=;i<=p;i++)
{
scanf("%d%d",&x,&y);
boy[i].l=x;boy[i].r=y;
}
for(k=;k<=n;k++)
{
ans=;
for(int i=;i<=p;i++)
{
if(boy[i].l<k)boy[i].l+=n;
if(boy[i].r<k)boy[i].r+=n;
if(boy[i].l>boy[i].r)swap(boy[i].l,boy[i].r);
}
sort(boy+,boy++p,cmp);
int ri=boy[].r,li=boy[].l;
for(int i=;i<=p;i++)
if(boy[i].l>ri)
{
ans=ans+ri-li;
li=boy[i].l;
ri=boy[i].r;
}
else ri=max(ri,boy[i].r);
ans=ans+ri-li;
minn=min(minn,ans);
}
printf("%d",minn);
return ;
}
/*
并查集
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10010
using namespace std;
int fa[maxn],l[maxn],r[maxn],n,p,ans,Ans=;
int find(int x)
{
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
void unionn(int x,int y)
{
if(x>y)swap(x,y);
for(int i=x;i<y;i++)
if(find(i)!=find(i+))
{
ans++;
fa[find(i)]=find(i+);
}
}
int main()
{
cin>>n>>p;
for(int i=;i<=p;i++)
cin>>l[i]>>r[i];
for(int k=;k<=n;k++)
{
ans=;
for(int i=;i<=n*;i++)fa[i]=i;
for(int i=;i<=p;i++)
{
int tmp1=l[i],tmp2=r[i];
if(tmp1<k)tmp1=tmp1+n;
if(tmp2<k)tmp2=tmp2+n;
if(find(tmp1)!=find(tmp2))unionn(find(tmp1),find(tmp2));
}
Ans=min(Ans,ans);
}
cout<<Ans;
return ;
}
codevs1955光纤通信(并查集)的更多相关文章
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- 关押罪犯 and 食物链(并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- bzoj1854--并查集
这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)
Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- Codeforces 731C Socks 并查集
题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...
- “玲珑杯”ACM比赛 Round #7 B -- Capture(并查集+优先队列)
题意:初始时有个首都1,有n个操作 +V表示有一个新的城市连接到了V号城市 -V表示V号城市断开了连接,同时V的子城市也会断开连接 每次输出在每次操作后到首都1距离最远的城市编号,多个距离相同输出编号 ...
随机推荐
- [R]django的HTTPREQUEST对象
django的HTTPREQUEST对象 via Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象, ...
- 请教 WINDOWSPHONE 有个人录了个传感器等硬件的视频,并且项目是完全开源的,大家有知道地址的吗?或者叫什么。
请教 WINDOWSPHONE 有个人录了个传感器等硬件的视频,并且项目是完全开源的,大家有知道地址的吗?或者叫什么.
- IOS--UILabel的使用方法详细
IOS-UILabel的使用方法详细 //UILabel的使用 UILabel *oneLabel = [[UILabel alloc] init]; // 最经常使用的 oneLabel.fra ...
- Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五)
Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五) 题记:关于SolrCloud的Recovery策略已经写了四篇了,这篇应该是系统介绍Recovery策略的最后一篇了 ...
- 转:gpio_request
今天再次学习SD卡驱动,遇到pgio_request这个函数,始终不知道其什么意思,看了几遍源代码才有了点感觉.现将其关键部分再此说明一下,以备自己以后复习,或是路客参考. 一般gpio_reques ...
- Node.js Express框架
Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...
- BZOJ 1033 杀蚂蚁
Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的任 ...
- 几个不错的编辑器BoneEdit
https://github.com/bonecode?tab=repositories
- TinyMCE下载及使用
1.TinyMCE下载 官方下载网址:http://www.tinymce.com/ 简体中文语言包下载:http://www.tinymce.com/i18n/index.php?ctrl=lang ...
- SORT ORDER BY STOPKEY
select * from ( select * from ( select a.*,rownum rn from page a where object_id >1000 and owner= ...