1003. Parity(并查集)
1003
看篇国家论文
《从《parity》的解法谈程序优化》
对于区间i,j 如果用sum[i],sum[j]来表示到i的1的个数的奇偶性 那么仔细想下 sum[i-1] 若与区间i,j相等 则sum[j]为偶 否则为奇
那么就可以把性质相同的合并在一个集合里 性质相同为朋友 不同为敌人 可以把一个端点分成两个 一个是自己一个是他的敌人 当与别的点合并时根据朋友的朋友是朋友 朋友的敌人是敌人 敌人的敌人 是朋友 这些原则 来进行合并 ,并判断是不是有矛盾
端点比较大 用map离散化下 map相对其它离散化方法操作还是比较简单点
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<map> 7 using namespace std; 8 #define N 10010 9 map<int,int>q;//map进行离散化 10 int que[N]; 11 struct node 12 { 13 int l,r,d; 14 }p[N]; 15 int father[N<<1]; 16 int find(int x) 17 { 18 if(father[x]!=x) 19 { 20 father[x] = find(father[x]); 21 } 22 return father[x]; 23 } 24 void union1(int x,int y) 25 { 26 int tx = find(x); 27 int ty = find(y); 28 if(tx!=ty) 29 father[tx] = ty; 30 } 31 int main() 32 { 33 int i,k,n,g=0; 34 char cc[10]; 35 while(scanf("%d",&n)!=EOF) 36 { 37 if(n==-1) 38 break; 39 q.clear(); 40 g = 0; 41 scanf("%d",&k); 42 for(i = 1; i <= k ; i++) 43 { 44 scanf("%d%d%s",&p[i].l,&p[i].r,cc); 45 if(strcmp(cc,"even")==0) 46 p[i].d = 0; 47 else 48 p[i].d = 1; 49 que[g++] = p[i].l; 50 que[g++] = p[i].r; 51 } 52 sort(que,que+g); 53 int o = 1; 54 q[que[0]] = o; 55 for(i = 1 ; i < g ; i++) 56 { 57 if(que[i]!=que[i-1]) 58 { 59 o++; 60 q[que[i]] = o; 61 } 62 } 63 for(i = 1; i <= o+N ; i++) 64 father[i] = i; 65 for(i = 1; i <= k ; i++) 66 { 67 int tx = q[p[i].l]-1; 68 int ty = q[p[i].r]; 69 if(p[i].d) 70 { 71 if(find(tx)==find(ty)) 72 { 73 printf("%d\n",i-1); 74 break; 75 } 76 else 77 { 78 union1(tx,ty+N);//敌人的敌人是朋友 79 union1(tx+N,ty); 80 } 81 } 82 else 83 { 84 if(find(tx)==find(ty+N)) 85 { 86 printf("%d\n",i-1); 87 break; 88 } 89 else 90 { 91 union1(tx,ty);//朋友的朋友是朋友 92 union1(tx+N,ty+N); 93 } 94 } 95 } 96 if(i==k+1) 97 printf("%d\n",k); 98 } 99 return 0; 100 }
View Code
转载于:https://www.cnblogs.com/shangyu/p/3342918.html
1003. Parity(并查集)相关推荐
- Ural_1003 Parity(并查集)
/*发现并查集的应用太巧妙了...大体思路:从题中可以看出来如果(i, j)是even的话,sum(i-1) 和 sum(j)的奇偶性相同.(i, j)如果是odd的话则其奇偶行不同.定义奇偶性为朋友 ...
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- P5937 [CEOI1999]Parity Game-扩展域并查集与离散化处理
题目链接[CEOI1999]Parity Game - 洛谷 单调队列优化多重背包(全网最详细解析)_秦三马和他的CF生涯的博客-CSDN博客 考察内容,扩展域并查集,本题中把奇偶性相同归为一个集合, ...
- [POJ1733]Parity game(并查集 + 离散化)
传送门 题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的 思路:如果我们知道[1,2][3,4][5,6]区间的信息,我们可以求出[1,6] ...
- 并查集——奇偶性(Parity)
题目描述 • 有一个 01 序列 , 长度 <=1000000000, 现在有 n 条 信息 , 每条信息的形式是- a b even/odd .表示 第 a 位到第 b 位元素之间的元素总和是 ...
- Parity(带权值的并查集)
你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串(例如其中的第3到第5个数字)问他,该子串中包含了奇数个还是偶数个1,他会回答你的问题,然后你可以继续提问......你怀疑朋友的答案 ...
- POJ 并查集 题目汇总 ——czyuan原创(转)
继续数据结构的复习,本次的专题是:并查集. 并查集,顾名思义,干的就是"并"和"查"两件事.很多与集合相关的操作都可以用并查集高效的解决. 两个操作代码: ...
- 【加权并查集】bzoj 4602 齿轮
立志用最少的代码做最高效的表达 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编 ...
- 【无码专区9】序列统计(带权并查集 + 前缀和建边 + dp)
因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...
最新文章
- SQL Server 重置SA密码语句
- java nio 应用场景_BIO、NIO、AIO简述及应用场景
- supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)
- 工作30:加入git版本库
- python xlwt操作excel
- C++Builder2010创建线程
- C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
- SpringBoot 整合 liquibase
- 用户与系统(unix)
- 《EDIUS 6.5快刀手高效剪辑技法》——1.5 常用视频术语简介
- 圈子圈套 pdf_名字叫什么? 如何圈套好域名
- Azure Tools---CAT(一)
- Linux登录mysql密码正确被拒绝访问
- Disturbed People CodeForces - 1077B
- cesium获取模型高度_180套经典夹具设计方案(附详解+模型),原来夹具设计这么简单!...
- k8s replicaset controller源码分析(1)- 初始化与启动分析
- Ensiko:含有勒索软件功能的Webshell
- Gulp——JS模块化说明视频-张晓飞-专题视频课程
- EAUML日拱一卒-微信小程序实战:位置闹铃 (14)-分析监控点状态
- 掌握这十个Linux命令,秒变Linux老手
热门文章
- 软件工程师的技能知识图谱0.1(偏后台方向)
- Unity3D实践1.1:解决摄像机跟随中的视野遮挡问题
- Unity3D切换场景之后光源失效(物体变暗)问题
- Unity3D基础11:Rigidbody物理类组件
- 2017百度之星初赛:B-1001. Chess
- 边与最小割(bzoj 1797: [Ahoi2009]Mincut 最小割)
- cube一站式云原生机器学习平台-推理服务的工程化加速
- python机器学习案例系列教程——聚类算法总结
- 01-操作数组的方法
- How to manage concurrency in Django models