2016-05-31 21:34:15

题目链接: 互斥的数 (Codevs No.1553)

题目大意:

  给N个数,如果其中两个数满足一个数是另一个的P倍,则称它俩互斥,求一个不互斥集合的最大容量

解法:

  听说跟hash有一点关系,不会....

  还是二分图匹配吧

  转化为求最大独立集=N-最大匹配

  裸的匈牙利算法上.外加一个map大法搞搞互斥关系

 //互斥的数 (Codevs No.1553)
//二分图匹配
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<map>
using namespace std;
const int maxn=;
int match[maxn];
long long a[maxn];
map<long long,int>m;
struct edge
{
int to;
int next;
edge(){}
edge(int to,int next):to(to),next(next){}
};
edge n[maxn*];
int cnt;
int head[maxn];
bool vis[maxn];
int N,P;
void insert(int x,int y)
{
n[++cnt]=edge(y,head[x]);
head[x]=cnt;
n[++cnt]=edge(x,head[y]);
head[y]=cnt;
return ;
}
bool DFS(int x)
{
for(int i=head[x];i;i=n[i].next)
{
if(!vis[n[i].to])
{
vis[n[i].to]=;
if(match[n[i].to]==-||DFS(match[n[i].to]))
{
match[n[i].to]=x;
match[x]=n[i].to;
return ;
}
}
}
return ;
}
int Maxmatch()
{
int ans=;
memset(match,-,sizeof(match));
for(int i=;i<=N;i++)
{
if(match[i]==-)
{
memset(vis,,sizeof(vis));
if(DFS(i))ans++;
}
}
return ans;
}
int main()
{
scanf("%d %d",&N,&P);
for(int i=;i<=N;i++)
{
scanf("%lld",&a[i]);
}
sort(a+,a+N+);
for(int i=N;i>=;i--)
{
m[a[i]]=i;
int tmp=m[P*a[i]];
if(tmp)insert(i,tmp);
}
printf("%d",N-Maxmatch());
}

Codevs No.1553 互斥的数的更多相关文章

  1. 【wikioi】1553 互斥的数(hash+set)

    http://wikioi.com/problem/1553/ 一开始我也知道用set来判a[i]/p是否在集合中,在的话就直接删掉. 但是我没有想到要排序,也没有想到当存在a,b使得a/p==b时到 ...

  2. codevs——1553 互斥的数

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解     题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同 ...

  3. codevs 1553 互斥的数

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数, ...

  4. codevs1553 互斥的数

    1553 互斥的数    

  5. 互斥的数(hash)

    1553 互斥的数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定, ...

  6. 互斥的数(codevs 1553)

    题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...

  7. T1553 互斥的数 codevs

    http://codevs.cn/problem/1553/ 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y ...

  8. [wikioi1553]互斥的数(数学分析+散列/数学分析+二分)

    题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...

  9. CODEVS1533 互斥的数(哈希表)

    给定一个集合,要求一个最大子集,满足两两之间不互斥.对两个数x,y互斥的定义是,y=p*x. 先对集合中的数从小到大排序后线性扫,若一个数x可以取则取,取完之后p*x这个数不可取.由于数字较大,使用哈 ...

随机推荐

  1. Redis是什么?

    1. Redis是什么 这个问题的结果影响了我们怎么用Redis.如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可以持久化的cache, 可 ...

  2. RestTemplateIntegrationTests

    摘录RestTemplate的集成测试类/* 2.    * Copyright 2002-2010 the original author or authors. 3.    * 4.    * L ...

  3. Linux下拆分大文件

    linux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][- ...

  4. [ZOJ1610]Count the Colors(线段树,区间染色,单点查询)

    题目链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=1610 题意:给一个长8000的绳子,向上染色.一共有n段被染色,问染 ...

  5. Codeforces Round #261 (Div. 2) D. Pashmak and Parmida's problem (树状数组求逆序数 变形)

    题目链接 题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数.i和j符合f(1,i,a[i])>f(j,n,a[j]),求i和j的种类数. 我们可以用map预处理出  ...

  6. windows2003 IIS6网络负载平衡设置

    问题 随着计算机技术的不断发展,单台计算机的性能和可靠性越来越高.但现实中还是有许多应用是单台计算机难以达到,例如: 1.银行存储用户数据的数据库服务器必须保证24小时不间断的运转,并在发生严重硬件故 ...

  7. nginx反向代理的简单配置

    有两台机器A和B. A上边是nginx,B上边是tomcat. 现在要通过A的反向代理功能,通过A的nginx访问到B的tomcat. 首先tomcat已经配置好,并且正确启动,可访问.       ...

  8. angular依赖注入的理解(转)

    使用过java进行开发的人肯定知道大名鼎鼎的spring框架,对于spring的IOC肯定也有所了解,通过配置文件定义好bean之后,如果需要使用这些bean,不需要自己去实例化,而是跟spring这 ...

  9. angularjs指令中的compile与link函数详解(转)

    http://www.jb51.net/article/58229.htm 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link, ...

  10. Oracle AWR报告自动生成并ftp脚本

    脚本主要由以下几个部分组成: awr.sql 用来在sqlplus 中执行的脚本,该脚本从网上直接找的. awr.sh 用来调用sqlplus来生成awr报告. ftp.sh 用来打包压缩每天生成的a ...