Luogu P1892

Luogu P2024

这两道一眼看过去很容易发现可以用并查集来做——但是当我们仔细阅读题面后,会发现其实并没有那么简单。

我们知道并查集可以很轻松地维护具有传递性的信息,也就是“朋友的朋友就是我的朋友”这样的关系,但是普通的并查集并不能维护“敌人的敌人是朋友”这种关系。

这时候我们就要引入一种神奇的操作,将并查集扩大一倍,将增加的这一倍空间来维护节点i的敌人。

例如对于团伙这一题

	if (c=='F')
{
merge(x,y);
}
else
{
merge(x,y+n);
merge(y,x+n);
//x+n代表的是x的敌人集合
}

非常好理解,确实是一种相当高效的操作。

P1892完整代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2001;
int fa[maxn],n,m,cnt,x,y;
int getf(int v)
{
if (fa[v]==v) return fa[v];
return fa[v]=getf(fa[v]);
}
inline void merge(int x,int y)
{
fa[getf(y)]=getf(x);
}
inline bool check(int x,int y)
{
if (getf(x)==getf(y)) return true;
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=2*n;i++) fa[i]=i;
for (int i=1;i<=m;i++)
{
char c;
scanf("\n%c %d %d",&c,&x,&y);
if (c=='F')
{
merge(x,y);
//merge(x+n,y+n);
//注意上面这句不能要,因为题目中没有说到朋友的敌人也是我的敌人。
}
else
{
merge(x,y+n);
merge(y,x+n);
}
}
for (int i=1;i<=n;i++) fa[i]=getf(i);//路径压缩,防止压缩不完全
for (int i=1;i<=n;i++) if (fa[i]==i) cnt++;
printf("%d\n",cnt);
return 0;
}

P2024完整代码

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=3*5*1e4+10;
int fa[maxn],cnt,n,k,flag,x,y;
int getf(int v)
{
if (fa[v]==v) return v;
return fa[v]=getf(fa[v]);
}
inline void merge(int x,int y)
{
x=getf(x);
y=getf(y);
fa[x]=y;
}
inline bool check(int x,int y)
{
x=getf(x);
y=getf(y);
if (fa[x]==fa[y]) return true;
return false;
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=3*n;i++)
fa[i]=i;
//i+n是i吃的集合,i+2n是吃i的集合
for (int i=1;i<=k;i++)
{
scanf("%d%d%d",&flag,&x,&y);
if (x>n||y>n) {cnt++;continue;}
if (flag==1)
{
if (check(x+n,y)) {cnt++;continue;}
if (check(x+2*n,y)) {cnt++;continue;}
merge(x,y);
merge(x+n,y+n);
merge(x+2*n,y+2*n);
}
if (flag==2)
{
if (check(x,y)) {cnt++;continue;}
if (check(y+n,x)) {cnt++;continue;}
merge(x+n,y);
merge(y+2*n,x);
merge(x+2*n,y+n);
}
}
printf("%d\n",cnt);
return 0;
}

最新文章

  1. php左侧分类列表显示菜单
  2. POJ 2155 Matrix (二维线段树)
  3. NopCommerce插件学习
  4. 流媒体基础实践之——RTMP和HLS分发服务器nginx.conmf配置文件(解决了,只能播放RTMP流而不能够播放HLS流的原因)
  5. ubuntu12.04下txt文件乱码如何解决
  6. 命令cd
  7. 红黑树-Python实现
  8. Codeforces Round#201(div1) D. Lucky Common Subsequence
  9. 0_Simple__cdpSimplePrint + 0_Simple__cdpSimpleQuicksort
  10. python学习笔记4_类和更抽象
  11. zynq linux驱动之PL-PS中断【转】
  12. bat处理快速安装jdk脚本
  13. Element.querySelector和Element.querySelectorAll和jQuery(element).find(selector)选择器的区别
  14. 美食应用 吃了么 beta 测试报告
  15. 深入理解 Java 虚拟机之学习笔记(2)
  16. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- Software Install
  17. Dataguard中日志传输服务
  18. pycharm中配置pep8
  19. Ubuntu 14.04 Server i386 安装 Oracle11g_11.2.0.3 RAC
  20. Git 从了解到放弃

热门文章

  1. MyBatis(2)-- MyBatis配置mybatis-config.xml
  2. django-模板之过滤器Add(十三)
  3. Spring Cloud gateway 网关服务 一
  4. 正则表达式和python中的re模块
  5. c# 保留两位小数点
  6. Vs使用EF来操作MySql(经验 )
  7. WebGL简易教程(十二):包围球与投影
  8. if __name__ == &quot;__main__&quot; 的作用
  9. LVS NAT模式实践
  10. RocketMQ 主从同步若干问题答疑