UVA11324-- The Largest Clique(SCC+DP)
题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中随意两个结点u和v满足:要么u能够到到v,要么v能够到达u(u和v能够互相到达)
思路:我们能够缩点,用Tarjan求出全部强连通分量,让每一个SCC的权值等于它的结点个数。因为SCC图是有一个DAG,使用DP求解。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <algorithm> using namespace std; const int MAXN = 1005; vector<int> g[MAXN], scc[MAXN], G[MAXN];
stack<int> s;
int pre[MAXN], lowlink[MAXN], sccno[MAXN], sccnum[MAXN], dfs_clock, scc_cnt;
int d[MAXN];
int n, m; int Tarjan(int u) {
lowlink[u] = pre[u] = ++dfs_clock;
s.push(u);
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i];
if (!pre[v]) {
Tarjan(v);
lowlink[u] = min(lowlink[v], lowlink[u]);
}
else if (!sccno[v]) {
lowlink[u] = min(lowlink[u], pre[v]);
}
}
if (lowlink[u] == pre[u]) {
scc_cnt++;
for (;;) {
int x = s.top();
s.pop();
sccno[x] = scc_cnt;
sccnum[sccno[x]]++;
if (x == u) break;
}
}
} void find_scc() {
memset(pre, 0, sizeof(pre));
memset(lowlink, 0, sizeof(lowlink));
memset(sccno, 0, sizeof(sccno));
memset(sccnum, 0, sizeof(sccnum));
dfs_clock = scc_cnt = 0;
for (int i = 0; i < n; i++)
if (!pre[i])
Tarjan(i);
} int dp(int i) {
int& ans = d[i];
if (ans > 0) return ans;
ans = sccnum[i];
for (int j = 0; j < G[i].size(); j++) {
int v = G[i][j];
ans = max(ans, dp(v) + sccnum[i]);
}
return ans;
} int main() {
int cas;
scanf("%d", &cas);
while (cas--) {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++)
g[i].clear();
int u, v;
for (int i = 0; i < m; i++) {
scanf("%d%d", &u, &v);
u--;
v--;
g[u].push_back(v);
} find_scc(); memset(d, -1, sizeof(d));
memset(G, 0, sizeof(G));
for (int u = 0; u < n; u++) {
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i];
if (sccno[u] != sccno[v])
G[sccno[u]].push_back(sccno[v]);
}
} int ans = 0;
for (int i = 1; i <= scc_cnt; i++)
ans = max(ans, dp(i)); printf("%d\n", ans);
}
return 0;
}
UVA11324-- The Largest Clique(SCC+DP)的更多相关文章
- uva11324 The Largest Clique --- 强连通+dp
给一个有向图G,求一个子图要求当中随意两点至少有一边可达. 问这个子图中最多含多少个顶点. 首先找SCC缩点建图.每一个点的权值就是该点包括点的个数. 要求当中随意两点可达,实际上全部边仅仅能同方向, ...
- UVA11324 The Largest Clique[强连通分量 缩点 DP]
UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...
- 『题解』UVa11324 The Largest Clique
原文地址 Problem Portal Portal1:UVa Portal2:Luogu Portal3:Vjudge Description Given a directed graph \(\t ...
- UVA11324 The Largest Clique —— 强连通分量 + 缩点 + DP
题目链接:https://vjudge.net/problem/UVA-11324 题解: 题意:给出一张有向图,求一个结点数最大的结点集,使得任意两个结点u.v,要么u能到达v, 要么v能到达u(u ...
- UVA11324 The Largest Clique(DP+缩点)
题意:给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以). 分析:”同一个强连通分量中的 ...
- UVA11324 The Largest Clique (强连通缩点+DP最长路)
<题目链接> 题目大意: 给你一张有向图 G,求一个结点数最大的结点集,使得该结点集中的任意两个结点 u 和 v 满足:要么 u 可以达 v,要么 v 可以达 u(u,v相互可达也行). ...
- UVA-11324 The Largest Clique (强连通+DP)
题目大意:在一张无向图中,最大的节点集使得集合内任意两个节点都能到达对方. 题目分析:找出所有的强连通分量,将每一个分量视作大节点,则原图变成了一张DAG.将每个分量中的节点个数作为节点权值,题目便转 ...
- UVAoj 11324 - The Largest Clique(tarjan + dp)
题意:给定一个有向图,寻找一个点数最大集合,使得这个集合中的任意两个点 u,v, 都有u->v 或者 v->u 或者u<==>v 思路:首先将强连通分量通过tarjan算法求出 ...
- UVA11324 The Largest Clique
嘟嘟嘟 很自然的想到先tarjan把强联通分量缩点,因为对于一个强联通分量,要么不选,要么全选,所以可看成一个点. 然后转化成了求DAG上的一条最长路(每一个点都有权值).刚开始我想用dijkstra ...
随机推荐
- 02-IOSCore - NSFileHandle、合并文件、文件指针、文件查看器
[day0201_NSFileHandle]:文件句柄 1 NSFileHandle 文件对接器.文件句柄 常用API: - (NSData *)readDataToEndOfFile;读取数据到最后 ...
- HEVC码率控制浅析——HM代码阅读之一
HM的码率控制提案主要参考如下三篇:K0103,M0036,M0257.本文及后续文章将基于HM12.0进行讨论,且首先仅讨论K0103对应的代码,之后再陆续补充M0036,M0257对应的代码分析, ...
- windows下Eclipse安装Perl插件教程
windows下Eclipse安装Perl插件教程 想用eclipse编写perl.网上看了很多资料.但EPIC插件的下载连接都失效了.无奈,只好自己动手写个教程记录一下. 准备工作: 安装好Ecli ...
- 仿StackOverflow开发在线问答系统
仿StackOverflow开发在线问答系统 [第二期11月9日开课]使用Python Flask Web开发框架实现一套类似StackOverflow的在线问答平台LouQA,具备提问,回答,评论点 ...
- mysql各版本区别
MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费, ...
- 科尔尼咨询公司 - MBA智库百科
科尔尼咨询公司 - MBA智库百科 科尔尼公司简介 科尔尼管理咨询公司(A.T. Kearney)于1926年在芝加哥成立,经过80多年的发展,科尔尼咨询已发展为一家全球领先的高增值管理咨询公司,科尔 ...
- [转]Cocos Studio和Cocos2d-x版本对应关系
2015-1-19阅读139 评论0 From: http://www.cocoachina.com/bbs/read.php?tid=182077 版本对应列表: Studio2.x CocosSt ...
- Core 中文文档
ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序 原文:Your First ASP. ...
- transition与animation
以前,一直都知道,transition是animation的一个简化版,甚至不算是动画,而是一种过渡. transition的用法 早两天用transition写了一个按钮滑动的效果,类似于IOS的设 ...
- 基于visual Studio2013解决C语言竞赛题之1012连接字符串
题目 解决代码及点评 /* 编写一个函数JOIN,让它实现字符串连接运算功能. */ #include <stdio.h> #include <stdl ...