hdu 3335 Divisibility(二分匹配)
2015-05-11 16:32
351 查看
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3335
这道题之前的一种做法是用Dancing Links做的 当然这道题也可以用 二分匹配做
求符合要求的最长的链 在这里涉及到一个定理 Dilworth定理
此题还要除重
这道题之前的一种做法是用Dancing Links做的 当然这道题也可以用 二分匹配做
求符合要求的最长的链 在这里涉及到一个定理 Dilworth定理
此题还要除重
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <algorithm> #include <string.h> #include <string> #include <vector> #include <queue> #define MEM(a,x) memset(a,x,sizeof a) #define eps 1e-8 #define MOD 10009 #define MAXN 10010 #define MAXM 100010 #define INF 99999999 #define ll __int64 #define bug cout<<"here"<<endl #define fread freopen("ceshi.txt","r",stdin) #define fwrite freopen("out.txt","w",stdout) using namespace std; int Read() { char c = getchar(); while (c < '0' | c > '9') c = getchar(); int x = 0; while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); } return x; } void Print(int a) { if(a>9) Print(a/10); putchar(a%10+'0'); } ll a[MAXN],b[MAXN]; vector<int> vec[MAXN]; int link[MAXN]; int n; int ans; int vis[MAXN]; int num; bool dfs(int u) { for(int i=0;i<vec[u].size();i++) { int v=vec[u][i]; if(!vis[v]) { vis[v]=1; if(link[v]==-1||dfs(link[v])) { link[v]=u; return 1; } } } return 0; } void hungary() { MEM(link,-1); for(int i=0;i<num;i++) { MEM(vis,0); if(dfs(i)) ans++; } } int main() { // fread; int tc; scanf("%d",&tc); while(tc--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%I64d",&a[i]); sort(a,a+n); num=0; b[num++]=a[0]; for(int i=1;i<n;i++) { if(a[i]!=a[i-1]) b[num++]=a[i]; } // for(int i=0;i<num;i++) // cout<<b[i]<<endl; // cout<<"num "<<num<<endl; for(int i=0;i<num;i++) vec[i].clear(); for(int i=0;i<num;i++) for(int j=0;j<num;j++) { if(i==j) continue; if(b[i]%b[j]==0) vec[i].push_back(j); } ans=0; hungary(); printf("%d\n",num-ans); } return 0; }
相关文章推荐
- hdu 3335 - 二分匹配求最小覆盖
- HDU 1045 二分匹配
- hdu 1669(二分图多重匹配+二分枚举)
- hdu 3829 Cat VS Dog (二分匹配 求 最大独立集)
- hdu 1068 二分匹配 匈牙利算法
- HDU 5090 Game with Pearls(二分匹配)
- HDU 2458 最大团个数=顶点数 - 补图最大匹配数 二分匹配
- hdu 2063(基础二分匹配)
- HDU-3335-Divisibility
- HDU 5090 Game with Pearls(二分匹配)
- 杭电 hdu 1150 Machine Schedule (二分匹配)
- hdu 1045Fire Net (建图 、二分匹配)
- hdu1669 二分多重匹配+二分
- HDU 1083 Courses (二分最大匹配)
- hdu2389-二分匹配HK算法
- hdu(3335)Divisibility
- HDU 2444 The Accomodation of Students-二分图判断&二分匹配
- HDU 1281 棋盘游戏-二分匹配
- hdu 1045Fire Net(DFS or 二分匹配)
- hdu 2389 Rain on your Parade(二分匹配Hopcroft-Carp算法模版)