【POJ】1182 食物链
2024-09-04 05:57:09
这是《挑战设计程序竞赛》中的例题。
题目链接: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 ;
}
最新文章
- [node.js 学习]1.start a simple server
- 【requireJS源码学习02】data-main加载的实现
- JavaScript数组的reduce方法详解
- ajax 异步插入图片到数据库(多图上传)
- uva 12096 The SetStack Computer
- call与apply的区别
- JavaFX游戏开发效率浅谈
- 在Linux(Centos7)上使用Docker运行.NetCore
- 七牛云图片的存储与处理--基于node
- [ISE 14.7] _pn.exe 崩溃问题 点击浏览崩溃问题
- Eloquent JavaScript #08# Bugs and Errors
- composer require 指定版本
- SQL Server 2008 R2:error 26 开启远程连接详解
- Linux服务器svn与项目同步
- Android学习之BitMap用法实例
- 使用java做paypal开发时购买东西支付不成功的原因
- CSS3实战之box-sizing
- spring boot 1.5.2 操作mongodb3.4.0
- Linux安装部署
- ab命令做压测测试