Codeforces 566F Clique in the Divisibility Graph

http://codeforces.com/problemset/problem/566/F

题目大意

有n个点,点上有值a[i], 任意两点(i, j)有无向边相连当且仅当

(a[i] mod a[j])==0||(a[j] mod a[i])==0

问这幅图中的最大连通子图是多少。

思路:直接转移,时间复杂度O(n^1.5)

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
int n,a[2000005],f[2000005];
int read(){
    int t=0,f=1;char ch=getchar();
    while (ch<‘0‘||ch>‘9‘){if (ch==‘-‘) f=-1;ch=getchar();}
    while (‘0‘<=ch&&ch<=‘9‘){t=t*10+ch-‘0‘;ch=getchar();}
    return t*f;
}
int main(){
    n=read();int mx=0;
    for (int i=1;i<=n;i++){
        a[i]=read();
        mx=std::max(mx,a[i]);
    }
    std::sort(a+1,a+1+n);
    int ans=0;
    for (int i=1;i<=n;i++){
        f[a[i]]++;
        for (int j=a[i]+a[i];j<=mx;j+=a[i])
         f[j]=std::max(f[j],f[a[i]]);
        ans=std::max(ans,f[a[i]]);
    }
    printf("%d\n",ans);
}
时间: 2024-10-05 20:18:00

Codeforces 566F Clique in the Divisibility Graph的相关文章

Codeforces 566 F. Clique in the Divisibility Graph

Codeforces 566F 的传送门 As you must know, the maximum clique problem in an arbitrary graph is NP-hard. Nevertheless, for some graphs of specific kinds it can be solved effectively. Just in case, let us remind you that a clique in a non-directed graph is

【CF 566F】 Clique in the Divisibility Graph

[CF 566F] Clique in the Divisibility Graph 最大团模型的dp 数做点 能约分的一对数间有路 问最大团(最大完全子图) 用最长公共子序列做法 dp出最长路 由于一个数约数的约数也是这个数的约数 所以只要能连起来就是个完全子图 代码如下: #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <alg

VK Cup 2015 - Finals F. Clique in the Divisibility Graph

题目链接 题意:给你n个数,求一个最长子序列,要求是这个子序列中任意两个数,其中一个一定是另外一个的倍数 代码如下: #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> const int N = 1E6+10; using namespace std; int dp[N], a; int main() { int n, maxn; while(~sc

分析公式 Codeforces 528B Clique Problem

http://codeforces.com/contest/528/problem/b Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The clique problem is one of the most well-known NP-complete problems. Under some

CodeForces 505B Mr. Kitayuta&#39;s Colorful Graph

Mr. Kitayuta's Colorful Graph Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 505B Description Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The

codeforces 505B Mr. Kitayuta&#39;s Colorful Graph(水题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The vertices of the graph are numbered from 1 to n. Each edge, namely edge

Codeforces 506D Mr. Kitayuta&#39;s Colorful Graph 并查集+水水的分类讨论+水水的离线预处理

首先读入所有的边与询问.将边按颜色分类. 按颜色进行并查集, 若此并查集内的点<= 100,则100*100/2的枚举是否联通. 若此并查集内的点  > 100,则将与这些点相关的所有询问查一遍. 那么时间复杂度为100*100/2*(M/100),或者为M/100*Q. 极限的时候两种方法都在一亿左右了,而且每次还需要在map里搞一搞,还要查询是否联通,不知道为啥没有超时.. #include <algorithm> #include <iostream> #incl

Codeforces 506D Mr. Kitayuta&#39;s Colorful Graph(分块 + 并查集)

题目链接  Mr. Kitayuta's Colorful Graph 把每种颜色分开来考虑. 所有的颜色分为两种:涉及的点的个数 $> \sqrt{n}$    涉及的点的个数 $<= \sqrt{n}$ 对于第一种颜色,并查集缩点之后对每个询问依次处理过来若两点连通则答案加一. 对于第二种颜色,并查集所点之后对该颜色涉及的所有点两两之间判断是否连通, 若连通则另外开一个map记录答案. 最后把两个部分的答案加起来即可. 细节问题  由于每种颜色处理完之后并查集都要重新初始化,对于第一种颜色

【CodeForces】915 D. Almost Acyclic Graph 拓扑排序找环

[题目]D. Almost Acyclic Graph [题意]给定n个点的有向图(无重边),问能否删除一条边使得全图无环.n<=500,m<=10^5. [算法]拓扑排序 [题解]找到一个简单环,则欲删除的边一定经过该环.尝试环上的每一条边(至多n条边)后再次拓扑排序判断全图是否有环. 拓扑排序后定位到简单环:剩余图是环+环内DAG,DFS过程中将走入死路的点标-1,访问过标1,找到访问过的点就是简单环.换起始点直到找到环为止. 复杂度O(nm). #include<cstdio>