Uva 11324 The Largest Clique
来源:互联网 发布:淘宝有发票是正品么 编辑:程序博客网 时间:2024/05/16 01:40
题意:
给你一张有向图G, 求一个最大的节点集,使得该节点集中任意两个点u, v,满足:u可以到达v, 或者v可以到达u(u、v相互到达也可以)。
分析:
在最优的方案中,每一个强连通分量中的点要么都选,要么都不选,那么我们就可以先把所有的强连通分量计算出来,然后再将不同的强连通分量建一个新图,则最优解就是一个Dag上的DP了
代码如下:
#include<iostream>#include<cstring>#include<cstdio>#include<stack>using namespace std;const int maxn = 1000 + 10;const int maxm = 50000 + 10;bool G[maxn][maxn];int size[maxn], d[maxn];int Begin[maxn], To[maxm], Next[maxm], E;void Add(int x, int y) { To[++E] = y; Next[E] = Begin[x]; Begin[x] = E;}stack<int> S;int dfs_clock, scc_cnt;int pre[maxn], lowlink[maxn], sccno[maxn];void dfs(int u) { S.push(u); lowlink[u] = pre[u] = ++dfs_clock; for(int i=Begin[u]; i; i=Next[i]) { int v = To[i]; if(!pre[v]) { dfs(v); lowlink[u] = min(lowlink[u], lowlink[v]); }else if(!sccno[v]) { lowlink[u] = min(lowlink[u], lowlink[v]); } } if(lowlink[u] == pre[u]) { scc_cnt++; while(1) { int x = S.top(); S.pop(); sccno[x] = scc_cnt; if(x == u) break; } }}void find_scc(int n) { dfs_clock = scc_cnt = 0; memset(pre, 0, sizeof(pre)); memset(sccno, 0, sizeof(sccno)); for(int i=1; i<=n; i++) if(!pre[i]) dfs(i);}int dp(int u) { int& ans = d[u]; if(ans >= 0) return ans; ans = size[u]; for(int i=1; i<=scc_cnt; i++) if(i != u && G[u][i]) ans = max(ans, dp(i) + size[u]); return ans;}inline void init() { E = 0; memset(d, -1, sizeof(d)); memset(G, 0, sizeof(G)); memset(size, 0, sizeof(size)); memset(Begin, 0, sizeof(Begin));}int T, n, m, u, v;int main() {#ifndef ONLINE_JUDGE freopen("data.txt", "r", stdin); freopen("ans.txt", "w", stdout);#endif scanf("%d", &T); while(T--) { init(); scanf("%d%d", &n, &m); for(int i=1; i<=m; i++) { scanf("%d%d", &u, &v); Add(u, v); } find_scc(n); for(int i=1; i<=n; i++) { size[sccno[i]]++; for(int j=Begin[i]; j; j=Next[j]) G[sccno[i]][sccno[To[j]]] = 1; } int ans = 0; for(int i=1; i<=scc_cnt; i++) ans = max(ans, dp(i)); printf("%d\n", ans); } return 0;}
0 0
- UVA 11324 The Largest Clique
- UVA 11324 The Largest Clique
- Uva-11324-The Largest Clique
- UVA - 11324 The Largest Clique
- UVA 11324 The Largest Clique
- Uva 11324 The Largest Clique
- UVA-The Largest Clique 11324
- uva 11324 The Largest Clique
- LRJ白书图论 11324 - The Largest Clique uva
- uva 11324 - The Largest Clique(缩点 + dp)
- Uva 11324 - The Largest Clique 缩点 求最大团
- UVa 11324 The Largest Clique / 强连通分量
- UVA 11324 The Largest Clique(SCC+DP)
- 【UVa】11324 The Largest Clique 强连通缩点+DP
- uva 11324 The Largest Clique (强连通分量+dp)
- uva 11324 The Largest Clique(图论-tarjan,动态规划)
- UVA 11324 - The Largest Clique(强连通分量+缩点)
- UVA 11324 The Largest Clique 强连通缩点+DP
- linux中任务的调度
- AC自动机の总结
- 如何用卷积神经网络CNN识别手写数字集?
- 常用的数据库索引优化语句总结
- Mac下搭建Nodejs环境
- Uva 11324 The Largest Clique
- 37、面向对象-继承
- python核心编程学习笔记-2016-07-18-01-print
- 几种获取进程列表的方法
- Java Web 自定义MVC框架
- iOS开发从入门到精通--定时器UITimer和视图对象移动
- luogu1328[NOIP2014 T1]生活大爆炸版石头剪刀布
- js中函数参数传递
- PipeValid.js 2.0 数据验证