这是《挑战设计程序竞赛》中的例题。


题目链接:http://poj.org/problem?id=1182

题意:中文题面。不赘述。

题解:

代码:

 //带权并查集
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = ; int f[maxn];
int dep[maxn];//深度 void init(int n){
for(int i = ; i <= n ;i++){
f[i] = i;
dep[i] = ;
}
} int find(int x){
if(x == f[x])
return x;
return f[x] = find(f[x]);
} void join(int x,int y){
x = find(x);
y = find(y);
if(x == y) return ;
if(dep[x] < dep[y]){
f[x] = y;
}
else{
f[y] = x;
if(dep[x] == dep[y])
dep[x]++;
}
} bool same(int x,int y){
return find(x) == find(y);
} int main(){
int n,k;
int d,x,y;
int ans = ;
scanf("%d%d",&n,&k);
init(n*);
for(int i = ; i < k; i++){
scanf("%d%d%d",&d,&x,&y);
if(x <= || x > n || y <= || y > n || ( d == && x == y)){
ans++;
continue;
}
if(d == ){
//xy同类
if( same(x,y+n) || same(x,y+*n)){
ans++;
continue;
}else{
join(x,y);
join(x+n , y+n);
join(x + *n, y + *n);
}
}else{
//x吃y
if(same(x,y)||same(x,y + *n)){
ans++;
continue;
}else{
join(x,y+n);
join(x + n, y + *n);
join(x + *n,y);
}
}
}
printf("%d",ans);
return ;
}

最新文章

  1. [node.js 学习]1.start a simple server
  2. 【requireJS源码学习02】data-main加载的实现
  3. JavaScript数组的reduce方法详解
  4. ajax 异步插入图片到数据库(多图上传)
  5. uva 12096 The SetStack Computer
  6. call与apply的区别
  7. JavaFX游戏开发效率浅谈
  8. 在Linux(Centos7)上使用Docker运行.NetCore
  9. 七牛云图片的存储与处理--基于node
  10. [ISE 14.7] _pn.exe 崩溃问题 点击浏览崩溃问题
  11. Eloquent JavaScript #08# Bugs and Errors
  12. composer require 指定版本
  13. SQL Server 2008 R2:error 26 开启远程连接详解
  14. Linux服务器svn与项目同步
  15. Android学习之BitMap用法实例
  16. 使用java做paypal开发时购买东西支付不成功的原因
  17. CSS3实战之box-sizing
  18. spring boot 1.5.2 操作mongodb3.4.0
  19. Linux安装部署
  20. ab命令做压测测试

热门文章

  1. 拾遗:btrfs
  2. String、StringBuffer、StringBuilder有什么区别?
  3. centos7部署汉化版gitlab
  4. mariadb入门
  5. HTML5 Shiv--解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
  6. react组件中的方法?
  7. NFS 服务器的配置
  8. 小波变换C代码
  9. Apache Tomcat下载、安装、环境变量配置以及项目部署
  10. 解决MySQL登录密码正确却提示错误-1045的方法