uva 11324 The Largest Clique
vjudge 上题目链接:uva 11324
scc + dp,根据大白书上的思路:" 同一个强连通分量中的点要么都选,要么不选。把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它的结点数,则题目转化为求 SCC 图上权最大的路径。由于 SCC 图是一个 DAG, 可以用动态规划求解。"
一开始我理解成了求所有结点的权值和,后来才明白所求的结果一定是 scc 上一条路径来的,即不能有任何分叉路径。我的代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N = ; vector<int> G[N], G2[N];
bool vis[N];
int sccno[N], scc_cnt, p[N];
vector<int> S; void dfs(int x) {
vis[x] = ;
for(int i = ; i < G[x].size(); ++i)
if(!vis[G[x][i]]) dfs(G[x][i]);
S.push_back(x);
} void dfs2(int x, int &num) {
if(sccno[x]) return ;
sccno[x] = scc_cnt;
++num;
for(int i = ; i < G2[x].size(); ++i)
dfs2(G2[x][i], num);
} void find_scc(int n) {
memset(vis, , sizeof vis);
S.clear();
for(int i = ; i < n; ++i)
if(!vis[i]) dfs(i); memset(sccno, , sizeof sccno);
memset(p, , sizeof p);
scc_cnt = ;
for(int i = n - ; i >= ; --i)
if(!sccno[S[i]]) {
++scc_cnt;
int num = ;
dfs2(S[i], num);
p[scc_cnt] = num;
}
} vector<int> d[N];
void debug(int n) {
for(int i = ; i < n; ++i)
d[i].clear();
for(int i = ; i < n; ++i)
d[sccno[i]].push_back(i); for(int u = ; u <= scc_cnt; ++u) {
printf("sccno[%d]: ",u);
for(int i = ; i < d[u].size(); ++i)
printf("%d ",d[u][i] + );
printf(" num = %d p[%d] = %d\n", d[u].size(), u, p[u]);
}
} vector<int> g3[N];
int node(int x) {
if(vis[x]) return p[x];
vis[x] = ;
int Max = ;
for(int i = ; i < g3[x].size(); ++i)
Max = max(Max, node(g3[x][i]));
return p[x] += Max;
} void new_graph(int n) {
for(int i = ; i <= n; ++i)
g3[i].clear();
for(int u = ; u < n; ++u)
for(int i = ; i < G[u].size(); ++i) {
int v = G[u][i];
if(sccno[u] != sccno[v]) g3[sccno[u]].push_back(sccno[v]);
}
memset(vis, , sizeof vis);
int ans = ;
for(int i = ; i <= scc_cnt; ++i)
ans = max(ans, node(i));
printf("%d\n",ans);
} int main() {
int t,n,m,x,y;
scanf("%d",&t);
while(t--) {
scanf("%d %d",&n,&m);
for(int i = ; i < n; ++i) {
G[i].clear();
G2[i].clear();
}
while(m--) {
scanf("%d %d",&x,&y);
--x; --y;
G[x].push_back(y);
G2[y].push_back(x);
}
find_scc(n);
// debug(n);
new_graph(n);
}
return ;
}
uva 11324 The Largest Clique的更多相关文章
- UVA 11324 - The Largest Clique(强连通分量+缩点)
UVA 11324 - The Largest Clique 题目链接 题意:给定一个有向图,要求找一个集合,使得集合内随意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点 思路:强连通分 ...
- uva 11324 The Largest Clique(图论-tarjan,动态规划)
Problem B: The Largest Clique Given a directed graph G, consider the following transformation. First ...
- 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 (Tarjan+记忆化)
/*每个环 要么不选 要么全选 可缩点 就得到一个GAD图 然后搞搞算出最大路径*/ #include<iostream> #include<cstdio> #include& ...
- UVA - 11324 The Largest Clique 强连通缩点+记忆化dp
题目要求一个最大的弱联通图. 首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构. 对新图进行记忆化dp,求一条权值最长的链,每一个点的权值就是当前强连通分量点的个数. /* Tarja ...
- UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
题意:给定一个有向图,求出一个最大的结点集,这个节点集中的随意两个点之间至少一个能到达还有一个点. 思路:假设一个点在这个节点集中,那么它所在的强连通分量中的点一定所有在这个节点集中,反之亦然, 求出 ...
- UVA 11324.The Largest Clique tarjan缩点+拓扑dp
题目链接:https://vjudge.net/problem/UVA-11324 题意:求一个有向图中结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要目u可以到达v,要么v可以到达u(相 ...
- UVa 11324 The Largest Clique (强连通分量+DP)
题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u. 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩 ...
- UVA - 11324 The Largest Clique (强连通缩点+dp)
题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...
随机推荐
- Linux学习之八——利用变量
一.变量的使用 用$放在变量前面进行使用,例如: echo $PATH 为了和别的字符隔开,可以用{}和"",例如 echo ${PATH}nic echo "$PATH ...
- Digital Roots 分类: HDU 2015-06-19 22:56 13人阅读 评论(0) 收藏
Digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- CurrentHashMap的实现原理
转载:http://wiki.jikexueyuan.com/project/java-collection/concurrenthashmap.html 概述 我们在之前的博文中了解到关于 Hash ...
- ISO C90 forbids mixed declarations and code 警告
编译的时候经常会遇到 ISO C90 forbids mixed declarations and code 警告百度了一下,知道是如下原因 : 变量定义之前任何一条非变量定义的语句(注意:语句是 ...
- winform中treeview中节点选中的技巧
我想实现譬如选择某子节点的时候,父节点会自动选中,如果选择父节点,子节点会全部选中,如果子节点全部不选,父节点也要不选. 贴代码 private void tvwMenu_AfterCheck(obj ...
- phpcms 02
头部和尾部包含 1 默认的首页模板 C:\wamp\www\phpcms\templates\ypzy2014\content\index.html 打开模板查看 第一句 {template &quo ...
- [Python]如何使用HtmlTestRunner让自动化测试报告内容更丰富
简述 使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtestrunner 进行生成,但是默认提供的生成报告内容,并不能 ...
- 2016年11月6日 星期日 --出埃及记 Exodus 19:22
2016年11月6日 星期日 --出埃及记 Exodus 19:22 Even the priests, who approach the LORD, must consecrate themselv ...
- MUI 框架微信支付
在MUI 框架中实现了支付宝支付后,以为MUI微信支付,也没什么大问题,结果这个问题困扰了我几天,后面再同事的提醒下终于弄出来了, 问题出在,开始使用Dcloud 公有证书 怎么也付不了....,后面 ...
- HTTP缓存机制
缓存对于移动端是非常重要的存在. 减少请求次数,减小服务器压力. 本地数据读取速度更快,让页面不会空白几百毫秒. 在无网络的情况下提供数据. 缓存一般由服务器控制(通过某些方式可以本地控制缓存,比如向 ...