UVA11324 The Largest Clique
2013-05-29 23:35
288 查看
通往另一个世界的虫洞
tarjan缩点+dp求最长路
tarjan缩点+dp求最长路
#include <cstdio> #include <cstring> #include <algorithm> #include <stack> using namespace std; struct edge{ int u, v, next; }e[55555]; const int N = 1111; int pre , lowlink , sccno , dfs_clock, scc_cnt, first , tot; int G , n, m, w , d ; bool vis ; stack<int> S; void init(int x, int y){ e[tot].u = x; e[tot].v = y; e[tot].next = first[x]; first[x] = tot++; } void dfs(int u){ pre[u] = lowlink[u] = ++dfs_clock; S.push(u); for (int i = first[u]; i != -1; i = e[i].next){ int v = e[i].v; if (!pre[v]){ dfs(v); lowlink[u] = min(lowlink[u], lowlink[v]); } else if (!sccno[v]) lowlink[u] = min(lowlink[u], pre[v]); } if (lowlink[u] == pre[u]){ scc_cnt += 1; for (;;){ int x = S.top(); S.pop(); sccno[x] = scc_cnt; if (x == u) break; } } } void tarjan(int n){ dfs_clock = scc_cnt = 0; memset(sccno, 0, sizeof(sccno)); memset(pre, 0, sizeof(pre)); for (int i = 1; i <= n; i++) if (!pre[i]) dfs(i); } int dp(int i){ int &ans = d[i]; if (vis[i]) return ans; vis[i] = 1; ans = w[i]; for (int j = 1; j <= scc_cnt; j++) if (G[i][j]) ans = max(ans, dp(j) + w[i]); return ans; } int main(){ int cs; scanf("%d", &cs); while(cs--){ tot = 0; memset(first, -1, sizeof(first)); memset(e, 0, sizeof(e)); scanf("%d%d", &n, &m); int x, y; for (int i = 0; i < m; i++){ scanf("%d%d", &x, &y); init(x, y); } tarjan(n); memset(w, 0, sizeof(w)); memset(G, 0, sizeof(G)); for (int i = 1; i <= n; i++) w[sccno[i]] += 1; for (int u = 1; u <= n; u++) for (int j = first[u]; j != -1; j = e[j].next){ int v = e[j].v; if (sccno[u] != sccno[v]) G[sccno[u]][sccno[v]] = w[sccno[u]]; } memset(d, 0, sizeof(d)); memset(vis, 0, sizeof(vis)); int ans = 0; for (int i = 1; i <= scc_cnt; i++) ans = max(ans, dp(i)); printf("%d\n", ans); } return 0; }
相关文章推荐
- uva 11324 the largest clique (2-sat 二分答案)
- UVAlive11324 The Largest Clique(scc+dp)
- UVA 11324 The Largest Clique (强连通缩点 + DAG最长路)
- uva 11324 The Largest Clique
- UVA 11324 - The Largest Clique(强连通分量+缩点)
- UVA 11324 - The Largest Clique(SCC缩点 + DP)
- UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
- uva11324 - The Largest Clique 有向图强连通分量+缩点+DP
- UVa 11324 The Largest Clique (强连通分量+DP)
- uva 11324 The Largest Clique(图论-tarjan,动态规划)
- UVa11324 - The Largest Clique(DAG+DP+SCC)
- UVA 11324 The Largest Clique(强连通+dp)
- UVA11324-- The Largest Clique(SCC+DP)
- UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)
- uva 11324 - The Largest Clique(缩点 + dp)
- uva 11324 The Largest Clique(图论-tarjan,动态规划)
- Uva11324 The Largest Clique tarjan+dp
- UVA 11324 The Largest Clique(tarjan有向图强连通+缩点)
- UVA11324 The Largest Clique
- UVA 11324 The Largest Clique (强连通分量缩点,图DP)