Wikioi 4246 NOIP模拟赛Day2T1 奶牛的身高 

题目描述 Description

奶牛们在FJ的养育下茁壮成长。这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的身高,由于Bessie是只奶牛,无法直接看出第i只奶牛的身高,而只能看出第i只奶牛与第j只奶牛的身高差,其中第i 只奶牛与第j只奶牛的身高差为A(i<=n)。当A大于0时表示这只奶牛比前一只奶牛高A cm,小于0时则是低。现在,FJ让Bessie总共去看了m次身高,当然也就传回给FJ m对奶牛的身高差,但是Bessie毕竟是奶牛,有时候眼睛可能会不好使……(大雾)你的任务是帮助FJ来判断是不是需要给Bessie看看眼睛了……

注:Hj-Hi=A 注意T1的样例 注意注意注意 重要的事情说三遍。

输入描述 Input Description

第一行为一个正整数w,表示有w组数据,即w个奶牛场,需要你判断。每组数据的第一行为两个正整数n和m,分别表示对应的奶牛场中的奶牛只数以及看了多少个对奶牛身高差。接下来的m行表示Bessie看m次后传回给FJ的m条信息,每条信息占一行,有三个整数s,t和v,表示第s只奶牛与第t只奶牛的身高差为v。

输出描述 Output Description

包含w行,每行是”Bessie’s eyes are good”或”Bessie is blind.”(不含双引号),其中第i行为”Bessie’s eyes are good”当且仅当第i组数据,即无法从第i个奶牛场传回的身高差判断Bessie视力好不好;第i行为”Bessie is blind.”当且仅当第i组数据,即从第i个奶牛场传回的身高差是有问题的。

样例输入 Sample Input

2

3 3

1 3 10

2 3 5

1 2 5

4 3

1 4 100

3 4 50

1 3 100

样例输出 Sample Output

Bessie’s eyes are good

Bessie is blind.

数据范围及提示 Data Size & Hint

对于30%的数据,保证n<=100,m<=1000;

对于100%的数据,保证w<=100,n<=1000,m<=30000,|A|<=30000.

思路:

可以使用一个并查集,维护父亲节点减去儿子节点的值(儿子节点减去父亲节点也可,但需要把之后的维护反过来)用rank表示,由于a-b+b-c=a-c的性质,路径压缩的时候只要累加到根的权值和就是该点对于根的权值。合并的时候则要计算一下,如果要合并的两个节点是a,b,他们的父亲节点是x,y,如果x=y,那么说明x-a=rank[a],y-b=rank[b],a-b=v(v是输入的值),由此可得a-b=rank[y]-rank[x],判断是否矛盾即可,如果a,b不同根,那么一定没有矛盾,只需要合并即可,但是合并的时候要重新处理a,b的rank值,还是像刚才那样设元,那么就可以得出rank[y]=rank[a]-rank[b]+d,问题到此就解决了

代码:

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<string>
#include<math.h>
using namespace std; int f[]={};
int rank[]={};
int n;
void initial()
{
for(int i=;i<=n;i++)
{
f[i]=i; rank[i]=;
}
}
int find(int x){
if(x==f[x]) return x;
int fa=f[x];
f[x] = find(f[x]);
rank[x] += rank[fa];
return f[x];
}
bool istrue(int x, int y, int d){
int ra=find(x), rb=find(y);
if(ra==rb){
if(rank[y]-rank[x]!=d) return false;
return true;
} f[rb] = ra; rank[rb] = rank[x]-rank[y]+d; return true; } int main() { int iw; scanf("%d",&iw); while (iw--) { int k,i,x,y,d; int ans=; scanf("%d%d",&n,&k); initial(); bool flag=true; for(i=;i<=k;i++) { scanf("%d%d%d",&x,&y,&d); if( !istrue(x,y,d) ) { if (flag) printf("Bessie is blind.\n"); flag=false; } } if (flag) printf("Bessie's eyes are good\n"); } }

 NOIP模拟赛 集合

【题目描述】

现在给你一些连续的整数,它们是从 A 到 B 的整数。一开始每个整数都属于各自的集 合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于 P 的公共质因数, 那么把它们所在的集合合并。 反复如上操作,直到没有可以合并的集合为止。 现在 Caima 想知道,最后有多少个集合。

【输入格式】

一行,三个整数 A,B,P。

【输出格式】

一个数,表示最终集合的个数。

【数据规模】

A≤B≤100000; 2≤P≤B。

【输入样例】

10 20 3

【输出样例】

7

【注意事项】

有 80%的数据 B≤1000。 样例解释{10,20,12,15,18},{13},{14},{16},{17},{19}。

思路:

逐一枚举质因数,然后并查集合并

代码:

 #include<cstring>
#include<iostream>
using namespace std;
#define N 100005 bool vis[N];
int p[N], cnt, phi[N],father[N],prime[N],choose[N];
int a,b,k;
int Eratosthenes (int n){
int i, j, k;
phi[] = ;
for (i = ; i < n; ++i){
if (!vis[i]) p[cnt++] = i,prime[i] = ;
for (j = i; j < n; j += i) {
if (!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i - );
vis[j] = true;
}
}
return cnt;
}
int findf(int x){
int j = x,t;
while(father[x] != x) x = father[x];
while(j != x){
t = father[j];
father[j] = t;
j = t;
}
return x;
}
int main(){
//freopen("set.in","r",stdin);
//freopen("set.out","w",stdout);
cin>>a>>b>>k;
for(int i = ;i <= b;i++) father[i] = i;
Eratosthenes(b);
for(int i = k;i <= b;i++){
if(prime[i]){
for(int j = ;j * i <= b;j++){
if(j*i < a) continue;
father[findf(j*i)] = findf(i);
}
}
}
int ans = ; for(int i = ;i <= b;i++) father[i] = findf(i);
for(int i = a;i <= b;i++){
if(!choose[father[i]]){
choose[father[i]] = ;
ans++;
}
}
cout<<ans;
return ;
}

图论&数据结构——并查集的更多相关文章

  1. 算法手记 之 数据结构(并查集详解)(POJ1703)

    <ACM/ICPC算法训练教程>读书笔记-这一次补上并查集的部分.将对并查集的思想进行详细阐述,并附上本人AC掉POJ1703的Code. 在一些有N个元素的集合应用问题中,通常会将每个元 ...

  2. ACM数据结构-并查集

    ACM数据结构-并查集   并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合 ...

  3. POJ 1703 Find them, Catch them (数据结构-并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 31102   Accepted: ...

  4. 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170

    POJ1182 http://poj.org/problem?id=1182 题目 难得的中文题... 食物链 Time Limit: 1000MS Memory Limit: 10000K Tota ...

  5. 第三十一篇 玩转数据结构——并查集(Union Find)

    1.. 并查集的应用场景 查看"网络"中节点的连接状态,这里的网络是广义上的网络 数学中的集合类的实现   2.. 并查集所支持的操作 对于一组数据,并查集主要支持两种操作:合并两 ...

  6. 【题解】P2024 [NOI2001]食物链 - 数据结构 - 并查集

    P2024 [NOI2001]食物链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 动物王国中有三类动物 \(A,B ...

  7. <数据结构>并查集与树

    作用 查:给定一个元素,查询它在哪个集合内 并:合并两个元素所在的集合 实现思路 对应关系 元素-->结点 集合-->树 多个集合-->森林 用树的根节点作为不同树的标志 合并时只需 ...

  8. 数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说

    260. [NOI2002] 银河英雄传说 ★★☆   输入文件:galaxy.in   输出文件:galaxy.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 公元五 ...

  9. hiho1515 - 数据结构 并查集

    题目链接 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想 ...

随机推荐

  1. android官方开源的高性能异步加载网络图片的Gridview例子

    这个是我在安卓安卓巴士上看到的资料,放到这儿共享下.这个例子android官方提供的,其中讲解了如何异步加载网络图片,以及在gridview中高效率的显示图片此代码很好的解决了加载大量图片时,报OOM ...

  2. 【JVM】模板解释器--字节码的resolve过程

    1.背景 上文探讨了:[JVM]模板解释器--如何根据字节码生成汇编码? 本篇,我们来关注下字节码的resolve过程. 2.问题及准备工作 上文虽然探讨了字节码到汇编码的过程,但是: mov %ra ...

  3. 【微收藏】来自Twitter的自动文字补齐jQuery插件 - Typeahead.js

    没图没逼格 事发有因 该插件可以结合本地数据进行一些操作.推荐关注一下H5的几种数据存储的方式(localstorage与sessionstorage.IndexedDB.离线缓存manifest文件 ...

  4. Git.Framework 框架随手记--ORM新增操作

    本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...

  5. JavaScript基础---AJAX

    内容提纲: 1.XMLHttpRequest 2.GET与POST 3.封装Ajax  发文不易,转载请注明链接出处,谢谢! 2005年Jesse James Garrett发表了一篇文章,标题为:“ ...

  6. Rhino Mock

    mock interfaces, delegates and classes, including those with parameterized constructors. set expecta ...

  7. iOS开发小技巧--边接受数据边写入文件的两种方法

    一.NSFileHanle 使用注意点:在往文件写入数据时,必须创建一个空的文件 指定文件写入的方式 -- 覆盖还是追加 最后记得关闭 <1>代码是在大文件传输的练习中截取的.写入数据之前 ...

  8. Java基础-内部类-为什么成员内部类可以无条件访问外部类

    在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...

  9. firefox与chrome中对select下拉框中的option支持问题

    firefox可以直接修改option的字体样式,但是chrome中option的字体样式是继承select的,这个是在项目中遇到的,具体的可以看一下 http://www.cnblogs.com/r ...

  10. LocalDB简介和在VS2012及以上版本的使用

    http://www.cnblogs.com/fzrain/p/3812364.html?utm_source=tuicool LocalDB简介和在VS2012及以上版本的使用   之前一不小心把自 ...