Codeforces 245G Suggested Friends - 交集set_intersection()
一些人互相是朋友(无向图连一条无向边),现在要添加一个推荐朋友的功能,如果对于x,有y,x与y不是朋友,但是y和x有共同的朋友,并且共同的朋友最多,那么y可以推荐给x。问对于每一个人,有多少人值得推荐。
map映射后建图,然后用set_intersection()求交集
这道题学习了一下set_intersection()的用法:
set_intersection( fir.begin() , fir.end() , sec.begin() , sec.end() , thr.begin() );
fir、sec、thr都是vector类型,当然也可以是int[]类型
要求fir和sec都是有序的,否则会出现错误。
sort(fir.begin(),fir.end());
该函数返回值为交集的尾指针,就是类似于thr.end()的概念。
这道题就对每个人求其他人的交集,计算出交集中有多少人即可。
#include<bits/stdc++.h>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num,len,an,bn,ans_num,cur;
bool flag;
map <string,int> mp;
vector <int> st[];
int vis[];
int tmp[];
string a,b,rev[];
int main()
{
scanf("%d",&n); for (i=;i<=n;i++) st[i].clear();
mp.clear();
memset(tmp,,sizeof(tmp));
num=;
an=bn=;
ans_num=;
cur=;
ans=; for (i=;i<=n;i++)
{
cin>>a>>b;
if (!mp.count(a))
{
mp[a]=++num;
rev[num]=a;
an=num;
}else an=mp[a]; if (!mp.count(b))
{
mp[b]=++num;
rev[num]=b;
bn=num;
}else bn=mp[b]; st[an].push_back(bn);
st[bn].push_back(an);
} for (i=;i<=num;i++)
{
sort(st[i].begin(),st[i].end());
} printf("%d\n",num);
for (i=;i<=num;i++)
{
int pre=; cur=;ans=;ans_num=; memset(vis,,sizeof(vis));
for (vector <int> ::iterator it=st[i].begin();it!=st[i].end();it++)
{
vis[*it]=;
}
vis[i]=; for (j=;j<=num;j++)
{
if (vis[j]) continue; cur=set_intersection(st[i].begin(),st[i].end(),st[j].begin(),st[j].end(),tmp)-tmp;
if (cur>ans_num)
{
ans_num=cur;
ans=;
}else
if (cur==ans_num)
{
ans++;
} } cout<<rev[i]<<" "<<ans<<endl;
} return ;
}
Codeforces 245G Suggested Friends - 交集set_intersection()的更多相关文章
- Codeforces 245G Suggested Friends 暴力乱搞
G. Suggested Friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- algorithm 中的常用函数
非修改性序列操作(12个) 循环 对序列中的每个元素执行某操作 for_each() 查找 在序列中找出某个值的第一次出现的位置 fin ...
- 头文件algorithm中的常用函数
非修改性序列操作(12个) 循环 对序列中的每个元素执行某操作 for_each() 查找 在序列中找出某个值的第一次出现的位置 fin ...
- STL学习之路
本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...
- C++ Set & MultiSet
转自http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍集合(Set)是一种包含已排序对象的关联容器 ...
- STL中set底层实现方式
Q:STL中set底层实现方式? 为什么不用hash? A: 第一个问题:set底层实现方式为RB树(即红黑树). 第二个问题: 首先set,不像map那样是key-value对,它的key与valu ...
- 【转】 C++库常用函数一览
本文中提到的函数库有:<string> <cctype> <algorithm> <cmath> <cstdlib> <iomanip ...
- STL set 使用小结
这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类 ...
- c++ 常用头文件
1.#include<iostream> iostream 的意思是输入输出流.#include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头 ...
随机推荐
- 3.1决策树理论--python深度机器学习
参考彭亮老师的视频教程:转载请注明出处及彭亮老师原创 视频教程: http://pan.baidu.com/s/1kVNe5EJ 0. 机器学习中分类和预测算法的评估: 准确率 速度 强壮行 ...
- UIView设置背景渐变色
UIView设置背景渐变色 // Allocate bitmap context CGContextRef bitmapContext = CGBitmapContextCreate(NULL, , ...
- Unity3D Asset Server搭建 .
Unity3D Asset Server搭建 本文转载于 http://blog.csdn.net/amazonzx/article/details/7980117,非常感谢! Asset Se ...
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- rsync命令来实现将服务器端的文件备份到客户端
rsync命令来实现将服务器端的文件备份到客户端
- 怒刷BZOJ记录(一)1001~1037
我实在是太弱了...不滚粗只能刷BZOJ了...这里来记录每天刷了什么题吧. 2015-7-9 : 1001[BeiJing2006]狼抓兔子 | 最大流练习(呃..其 ...
- Linux企业级开发技术(4)——epoll企业级开发之epoll例程
为了使大家更加深入了解epoll模型在企业应用中的使用,下面给出一段基于epoll的服务器代码,并在代码中添加了详细注释: #include <deque> #include <ma ...
- RAM——[HAOI2007]理想的正方形
题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...
- 《University Calculus》-chape4-导数的应用-极值点的二阶导数检验法
函数凹凸性检验: 很容易看到,观察类似抛物线这类曲线,能够看到它们有一个向上凹或者向下凹的这样一个过程,而我们将这个过程细化并观察一系列点的导数的变化情况我们给出如下的定义: (1)如果函数图像在区间 ...
- linux运维社区站点收集
1, 新世纪linux社区 offical locator: http://www.21ops.com/industry-news/24370.html 2,