POJ1182食物链(并查集经典好题)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/E
题目思路:主要有两种思路:1.带权并查集2.挑战程序上的算法(个人理解也算是带权并查集的一种,但是更易懂,思路更清晰)
(介绍挑战上的算法) 将整个数组开到3倍,分3个组,每个组之间的关系确定x,y的关系(判定假话),x,y的关系确定合并哪些组的元素
挑战程序P88
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- #include <stack>
- #include <cctype>
- #include <queue>
- #include <string>
- #include <vector>
- #include <set>
- #include <map>
- #include <climits>
- #define lson root<<1,l,mid
- #define rson root<<1|1,mid+1,r
- #define fi first
- #define se second
- #define ping(x,y) ((x-y)*(x-y))
- #define mst(x,y) memset(x,y,sizeof(x))
- #define mcp(x,y) memcpy(x,y,sizeof(y))
- #define Min(x,y) (x<y?x:y)
- #define Max(x,y) (x>y?x:y)
- using namespace std;
- #define gamma 0.5772156649015328606065120
- #define MOD 100000007
- #define inf 0x3f3f3f3f
- #define N 150010
- #define maxn 10001000
- typedef long long LL;
- typedef pair<int,int> PII;
- int fp[N];
- int n,m;
- int findp(int x){return fp[x]==x?x:fp[x]=findp(fp[x]);}
- inline int same(int x,int y){return findp(x)==findp(y);}
- inline void Union(int x,int y){int u=findp(x);int v=findp(y);fp[u]=v;}
- int main()
- {
- int i,j,x,y,v,ans;
- // freopen("lxx.txt","r",stdin);
- scanf("%d%d",&n,&m);{
- for(i=; i<=n*; ++i) fp[i]=i;
- ans=;
- while(m--){
- scanf("%d%d%d",&v,&x,&y);
- if(x<||x>n||y<||y>n) ++ans;
- else if(v==&&x==y) ++ans;
- else if(v==){
- if(same(x,y+n)||same(x,y+*n)) ++ans;
- else{
- Union(x,y);
- Union(x+n,y+n);
- Union(x+n*,y+n*);
- }
- }
- else{
- if(same(x,y)||same(x,y+*n)) ++ans;
- else{
- Union(x,y+n);
- Union(x+n,y+*n);
- Union(x+*n,y);
- }
- }
- }
- printf("%d\n",ans);
- }
- return ;
- }
这道题必须单组输入,加EOF就WA,太坑了
参考题解:传送门
POJ1182食物链(并查集经典好题)的更多相关文章
- POJ-1182 食物链 并查集(互相关联的并查集写法)
题目链接:https://cn.vjudge.net/problem/POJ-1182 题意 中文题目,就不写了哈哈 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃 ...
- POJ-1182 食物链---并查集(附模板)
题目链接: https://vjudge.net/problem/POJ-1182 题目大意: 中文题,不多说. 思路: 给每个动物创建3个元素,i-A, i-B, i-C i-x表示i属于种类x,并 ...
- [poj1182]食物链(并查集+补集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64841 Accepted: 19077 Description ...
- poj1182食物链--并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...
- POJ - 1182 食物链 并查集经典
思路:设r(x)表示节点x与根结点的关系,px表示x的根结点.记录每个节点与其父节点的关系,就能很方便知道每个节点以及和它的父节点的关系. struct node{ int par; //父亲节点 i ...
- HDU 1232 (畅通工程) 并查集经典模板题
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...
- POJ1182 食物链 并查集
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;const int ...
- poj 2236:Wireless Network(并查集,提高题)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 16065 Accepted: 677 ...
- poj 2524:Ubiquitous Religions(并查集,入门题)
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23997 Accepted: ...
随机推荐
- CocoSourcesCS 4
/*------------------------------------------------------------------------- ParserGen.cs -- Generati ...
- Acer商祺x4610安装及使用
一年前心血来潮买了部Acer商祺x4610,这两天把它装起来,记录下过程以备忘. 首先装操作系统,我装的是XP,这款电脑比较贴心的是开机时按住F12可以选择光盘还是硬盘启动,就不用到BIOS里面设置启 ...
- 在虚拟机安装 Linux Server (ubuntu-14.04-server)
在虚拟机安装 Linux Server (ubuntu-14.04-server) 过程 从下载開始到成功安装历时约1小时 还算快的啦 可能国庆假期间网速快点吧 1. 下载安装文件 watermar ...
- ios app在itunesConnect里面的几种状态
原地址:http://blog.csdn.net/dean19900504/article/details/8164734 Waiting for Upload (Yellow) Appears wh ...
- C语言-一个fopen函数中未使用二进制模式(b)引发的血案
转自:http://blog.csdn.net/hinyunsin/article/details/6401854 最近写了一个网络文件传输模块,为了让这个模块具有更好的移植性,我尽量使用C标准IO ...
- AngularJs学习笔记(1)——ng-app
众所周知: ng-app 指令用于告诉 AngularJS 应用当前这个元素是根元素.所有 AngularJS 应用都必须要要一个根元素. 只有被具有ng-app属性的DOM元素包含的元素才会受ang ...
- nginx 限制ip访问频率和限速 (摘录)
限制某个IP同一时间段的访问次数 如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分 ...
- 用VMware 8安装Ubuntu 12.04具体过程(图解)
图解演示环境版本号: 本机系统: WIN7 虚拟机:VMware Workstation 8 (英文版) 安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像 ...
- JavaScript之引用类型
js中的引用类型和其他语言中类的概念很相似,但并不一样. 引用类型是一种数据结构,就像房子的骨架,承载着数据和功能的衔接. 而对象,则是引用类型的具体实现,即实例. var person = new ...
- java中Calendar.getInstance()和new Date()的差别是什么?
java中Calendar.getInstance()和new Date()的差别如下: Calendar.getInstance()是获取一个Calendar对象并可以进行时间的计算,时区的指定ne ...