hdu 3335 最大独立集,疑惑
2015-07-27 18:48
267 查看
有整除关系就建边,然后求最大独立集,不过还是不懂为什么建双向边hunagry返回结果除以2就会WA。
单向建边的AC代码:
单向建边的AC代码:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 1001; const int M = 1000000; bool visit ; __int64 a ; int head ; int mark ; int n, e; struct Edge { int v, next; } edge[M]; void addEdge( int u, int v ) { edge[e].v = v; edge[e].next = head[u]; head[u] = e++; } int dfs( int u ) { for ( int i = head[u]; i != -1; i = edge[i].next ) { int v = edge[i].v; if ( !visit[v] ) { visit[v] = true; if ( mark[v] == -1 || dfs( mark[v] ) ) { mark[v] = u; return 1; } } } return 0; } int hunagry() { memset( mark, -1, sizeof(mark) ); int res = 0; for ( int i = 1; i <= n; i++ ) { memset( visit, 0, sizeof(visit) ); res += dfs(i); } return res; } int main() { int t; scanf("%d", &t); while ( t-- ) { e = 0; memset( head, -1, sizeof(head) ); scanf("%d", &n); for ( int i = 1; i <= n; i++ ) { scanf("%I64d", a + i); for ( int j = i - 1; j > 0; j-- ) { if ( a[i] % a[j] == 0 || a[j] % a[i] == 0 ) { addEdge( j, i ); } } } int ans = n - hunagry(); printf("%d\n", ans); } return 0; }
相关文章推荐
- scala下划线的含义
- 宏定义(const)和常量定义(#define)的区别
- 了解DataTables
- Service在前台运行
- 利用iptables给Docker绑定一个外网IP
- 2008 Asia Regional Beijing
- python tab补全
- UVA 10970 Big Chocolate
- codeforces Gym 100500C C. ICPC Giveaways 排序
- QT之write and read
- 导出结果跟查询结果不一致
- leetcode 060 —— Permutation Sequence
- Java中的可变参数(来自《Java编程手记》一书)
- 深入浅出Android App耗电量统计
- leetcode oj 2
- [HAOI2005]路由问题,第二短路
- ixgbe rx_missed_errors
- Fragment的startActivityForResult方法
- HDU-2487
- python数组过滤实现方法