UVA 11324 The Largest Clique (强连通分量,dp)
给出一个有向图,求一个最大的结点集合,任意两个点u,v。u可到达v或v可到达u。
一个强连通分量肯定一起选的。而且只能在一条路径上。
所以先找出所有scc,然后缩点找一条最大权的路径,按拓扑序跑DAG上的dp。
注意0,0这组数据
#include<bits/stdc++.h>
using namespace std; const int maxn = ,maxm = 5e5+; int head[maxn],to[maxm],nxt[maxm]; void addEdge(int u,int v,int i)
{
to[i] = v;
nxt[i] = head[u];
head[u] = i;
} int pre[maxn],low[maxn],sccno[maxn],dfs_clock,scc_cnt;
stack<int> stk; void tarjan(int u)
{
pre[u] = low[u] = ++dfs_clock;
stk.push(u);
for(int i = head[u]; ~i; i = nxt[i]){
int v = to[i];
if(!pre[v]){
tarjan(v);
low[u] = min(low[u],low[v]);
}else if(!sccno[v]){
low[u] = min(low[u],pre[v]);
}
}
if(pre[u] == low[u]){
scc_cnt++;
while(stk.size()){
int x = stk.top(); stk.pop();
sccno[x] = scc_cnt;
if(x == u) break;
}
}
} void find_scc(int n)
{
memset(pre,,sizeof(pre));
memset(sccno,,sizeof(sccno));
dfs_clock = scc_cnt = ;
for(int i = ; i < n; i++){
if(!pre[i]) tarjan(i);
}
} vector<int> G[maxn];
int wei[maxn], deg[maxn]; void buildDAG(int n)
{
for(int i = ; i <= scc_cnt; i++) G[i].clear(),deg[i] = wei[i] = ;
for(int u = ; u < n; u++){
int v0 = sccno[u]; wei[v0]++;
for(int i = head[u]; ~i; i = nxt[i]){
int v1 = sccno[to[i]];
if(v0 != v1) G[v0].push_back(v1),deg[v1]++;
}
}
} int dp[maxn];
int topo()
{
memset(dp,-,sizeof(dp));
queue<int> q;
for(int i = ; i <= scc_cnt; i++){
if(!deg[i]) q.push(i),dp[i] = wei[i];
}
while(q.size()){
int u = q.front(); q.pop();
for(int i = ; i < (int)G[u].size(); i++){
int v = G[u][i];
dp[v] = max(dp[v],dp[u]+wei[v]);
if(--deg[v] == ) q.push(v);
}
}
int ans = ;
for(int i = ; i <= scc_cnt; i++){
ans = max(dp[i],ans);
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
int T; scanf("%d",&T);
while(T--){
int n,m;
memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for(int i = ; i < m; i++){
int u,v; scanf("%d%d",&u,&v);
addEdge(u-,v-,i);
}
find_scc(n);
buildDAG(n);
printf("%d\n",topo());
}
return ;
}
UVA 11324 The Largest Clique (强连通分量,dp)的更多相关文章
- UVa 11324 The Largest Clique (强连通分量+DP)
题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u. 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩 ...
- UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
题意:给定一个有向图,求出一个最大的结点集,这个节点集中的随意两个点之间至少一个能到达还有一个点. 思路:假设一个点在这个节点集中,那么它所在的强连通分量中的点一定所有在这个节点集中,反之亦然, 求出 ...
- uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=25&page=sh ...
- UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
题目要求一个最大的弱联通图. 首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构. 对新图进行记忆化dp,求一条权值最长的链,每一个点的权值就是当前强连通分量点的个数. /* Tarja ...
- UVA - 11324 The Largest Clique (强连通缩点+dp)
题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...
- UVA 11324 - The Largest Clique(强连通分量+缩点)
UVA 11324 - The Largest Clique 题目链接 题意:给定一个有向图,要求找一个集合,使得集合内随意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点 思路:强连通分 ...
- UVA11324 The Largest Clique[强连通分量 缩点 DP]
UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...
- UVA11324 The Largest Clique —— 强连通分量 + 缩点 + DP
题目链接:https://vjudge.net/problem/UVA-11324 题解: 题意:给出一张有向图,求一个结点数最大的结点集,使得任意两个结点u.v,要么u能到达v, 要么v能到达u(u ...
- uva 11324 The Largest Clique
vjudge 上题目链接:uva 11324 scc + dp,根据大白书上的思路:" 同一个强连通分量中的点要么都选,要么不选.把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它 ...
随机推荐
- HDOj-1425
sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 2.11-2.12 HBase的数据迁移常见方式
一.importtsv 把hdfs中数据抽取到HBase表中: 1.准备数据 ##student.tsv [root@hadoop-senior datas]# cat student.tsv 100 ...
- Java简单的数组用法尝试,和C语言很不一样
public class Main { static int ARRY_LONGTH=100; static int[] getRandomArr(int n){ int[] randomArr; r ...
- 百度地图API示例 JS
http://developer.baidu.com/map/jsdemo.htm#c2_2
- HDU2896【AC自动机-模板】
思路: 因为不同病毒特征码不会相同. AC自动机,然后对于每一个输出即可. 注意:以上字符串中字符都是ASCII码可见字符(不包括回车);G++ MLE. //#include <bits/st ...
- Python decorate 函数
1. decorate 函数需要在 "@wrap" 之前定义, 否则会报错
- StringUtils中常用方法leftPad(),rightPad(),center()
org.apache.commons.lang3的StringUtils 方法如下: public static String leftPadTime(Integer time){ return ...
- idea svn 问题
https://blog.csdn.net/liyantianmin/article/details/52837506
- Mybatis分页中遇到的坑3
Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 相关文章 Mybatis 解析配置文件的源码解析 Mybatis 类型转换源码分析 Mybatis 数据源和数 ...
- DB2 - 编目的解释
编目(Catalog),是在本地或远程建立客户端到服务器的数据库连接的过程.其目的在于获取编目信息,即生成用来访问数据库的目录.系统数据库目录包含一个列表和指针,通过目录可以使 DB2 能够找到已知的 ...