FZU 2192 位置信息挖掘 (种类并查集)
2015-06-20 13:28
369 查看
题目链接:click here~~
【题目大意】:
O2O即Online To Offline,是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。这些商务机会主要是偏服务类的商品,例如汽车售后服务、摄影服务、餐饮、电影等,其特色是线上购买、线下服务。
因此,对这类垂直行业的商品做移动推荐时,用户和商品的位置信息显得格外重要。但是,可能存在用户、商品的位置信息缺失的情况,例如:用户不共享位置信息、商家未填写位置信息……
现在,Jason给出用户在移动端的购买行为数据,以及商品集合,希望能补全一些缺失的位置信息。为了简化问题,假设:
1、由于是服务类的商品,如果用户位于城市A,那么该用户只会购买位于城市A的商品。
2、数据不存在噪声,即测试数据都是合法的。
Input
包含多组数据
每组输入数据格式如下:
第一行,三个数:N、M、Q,表示N个商品,M条购买行为数据,Q个询问。
接下来N行,每行两个数:itemId、cityId,表示商家填写的服务itemId,位于城市cityId。
接下来M行,每行三个数:userId、itemId、cityId,表示用户userId购买了服务itemId,移动端定位城市cityId。
接下来Q行,每行两个数:0、itemId或者1、userId,表示询问服务itemId所在的城市,或者用户userId所在的城市。
注意:0表示位置信息缺失。
Output
每组输出数据格式如下: Q行,每行一个数:cityId,表示服务itemId位于cityId,或者用户userId位于cityId。
Sample Input
3 2 5
2 0
3 0
1 3
2 2 2
1 1 0
0 1
0 2
0 3
1 1
1 2
Sample Output
3
2
0
3
2
【解题思路】:用到了并查集,开始直接用模拟去做,发现不能简单的去处理,所谓种类并查集,只是一个区别罢了,涉及到不同的种类对象,把需要处理的itemid和cityid用并查集合并起来,因为题目中确定两者一一对应的关系,然后我们去合并的时候注意要及时更新num[fy]=num[fx],具体看代码吧~~
代码:
【题目大意】:
O2O即Online To Offline,是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。这些商务机会主要是偏服务类的商品,例如汽车售后服务、摄影服务、餐饮、电影等,其特色是线上购买、线下服务。
因此,对这类垂直行业的商品做移动推荐时,用户和商品的位置信息显得格外重要。但是,可能存在用户、商品的位置信息缺失的情况,例如:用户不共享位置信息、商家未填写位置信息……
现在,Jason给出用户在移动端的购买行为数据,以及商品集合,希望能补全一些缺失的位置信息。为了简化问题,假设:
1、由于是服务类的商品,如果用户位于城市A,那么该用户只会购买位于城市A的商品。
2、数据不存在噪声,即测试数据都是合法的。
Input
包含多组数据
每组输入数据格式如下:
第一行,三个数:N、M、Q,表示N个商品,M条购买行为数据,Q个询问。
接下来N行,每行两个数:itemId、cityId,表示商家填写的服务itemId,位于城市cityId。
接下来M行,每行三个数:userId、itemId、cityId,表示用户userId购买了服务itemId,移动端定位城市cityId。
接下来Q行,每行两个数:0、itemId或者1、userId,表示询问服务itemId所在的城市,或者用户userId所在的城市。
注意:0表示位置信息缺失。
Output
每组输出数据格式如下: Q行,每行一个数:cityId,表示服务itemId位于cityId,或者用户userId位于cityId。
Sample Input
3 2 5
2 0
3 0
1 3
2 2 2
1 1 0
0 1
0 2
0 3
1 1
1 2
Sample Output
3
2
0
3
2
【解题思路】:用到了并查集,开始直接用模拟去做,发现不能简单的去处理,所谓种类并查集,只是一个区别罢了,涉及到不同的种类对象,把需要处理的itemid和cityid用并查集合并起来,因为题目中确定两者一一对应的关系,然后我们去合并的时候注意要及时更新num[fy]=num[fx],具体看代码吧~~
代码:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; const int N=1e5+10; int fa ; int num ; int treeh ; int n,m,q,za,zb; int itemid,cityid,usedid; void init() { for(int i=0; i<=n+m; ++i) { fa[i]=i; treeh[i]=num[i]=0; } } int find(int x) { if(x==fa[x]) return x; else return fa[x]=find(fa[x]); } void unite(int x,int y,int d)//每次合并的时候更新num { int fx=find(x); int fy=find(y); if(d) num[fx]=d;//注意更新 fa[fx]=fy; if(num[fy]==0) num[fy]=num[fx]; } int main() { while(cin>>n>>m>>q) { init(); for(int i=0; i<n; ++i) { cin>>itemid>>cityid; if(cityid) num[itemid]=cityid; } for(int i=0; i<m; ++i) { cin>>usedid>>itemid>>cityid; if(cityid) num[usedid+n]=cityid; unite(usedid+n,itemid,cityid); } while(q--) { cin>>za>>zb; if(za==0) cout<<num[find(zb)]<<endl; else cout<<num[find(zb+n)]<<endl; } } return 0; } /* 3 2 5 2 0 3 0 1 3 2 2 2 1 1 0 0 1 0 2 0 3 1 1 1 2 Sample Output 3 2 0 3 2 */
相关文章推荐
- EditPlus保存时不生成bak文件(转)
- nginx ats squid varnish使用场景对比介绍
- Android学习第三课:I/O文件读写操作(一)
- CSU - 1556 Jerry's trouble(快速幂)
- 列表中li标签设置margin在IE6和IE7中第一个行失效的解决方法
- Spring整合JMS(四)——事务管理
- oj刷题——第十五周C++习题 对象转换
- 杭电 ACM HDU Train Problem I
- 老牌绘图工具pic的基本使用
- 20150620仿淘宝图片放大镜
- 第17周项目6 阅读文件,多文件
- Spring整合JMS(三)——MessageConverter介绍
- 获取Class对象的三种获取方式:
- 测试与调试
- Android学习笔记(四十):Preference使用
- 日语学习之沪江N3基础 20150620 -3
- Spring整合JMS(二)——三种消息监听器
- 父亲节快到了,几句父亲的话留下
- 有一个NSStirng类型,retain时尚宣言name财产setter内部方法的每一行代码的作用?
- WebRTC代码走读(十一):video_coding模块分析