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距离最远的城市编号,多个距离相同输出编号 ...
随机推荐
- !a && !b 和 !(a || b) 的故事
// awk代码,当continue执行时说明书是免费的 || )) { continue } 这段代码大概是半年前写的,半年后过来读,发现已经不理解这段代码了,虽然理解当contniue执行时意味着 ...
- Eclipse maven git
http://www.blogjava.net/youxia/archive/2013/12/29/408182.html
- mysql 监控长事务
mysql> desc information_schema.innodb_trx -> ; +----------------------------+----------------- ...
- InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁!
InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的. InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoD ...
- Unity NGUI实现按钮点击播放Aniamtion
unity版本:4.5 NGUI版本:3.6.5 参考链接:http://www.colabug.com/thread-1029974-1-1.html,作者:COLABUG.COM 橘虞 1.怎么创 ...
- 实战weblogic集群之安装weblogic
一.系统及软件版本 OS版本:Red Hat Enterprise Linux Server release 6.6WebLogic Server 版本: 10.3.3.0JDK版本:1.7.0_79 ...
- 2015第37周二foxmail邮箱客户端迁移
foxmail7.0邮箱客户端迁移风波浪费我下午不少时间,不知为何做完foxmail客户端在卡的时候我将其强制关闭,然后将整个邮箱目录拷贝到一台新电脑上,运行客户端居然我要新建账户(账户信息丢失),将 ...
- Android 金融项目整理
本来是安安心心周末休假的时间,却被强征来加班.魔都今天雾霾严重,窗外都看不到360无死角都能看到的东方明珠.吃完午饭后睡一觉起来,觉得该给自己做点事情了.那就把项目里面的一些可圈可点的技术都罗列出来, ...
- 不允许从数据类型 nvarchar 到 varbinary 的隐式转换
一:错误截图 二:解决 数据库里面的数据类型错了,应该是varchar,而我选了varbinary.太粗心了!
- Linux Zynq GPIO中断
注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS, (int)chip->ngpio) ...