Uva 11324 最大团
题目链接:http://vjudge.net/contest/141990#problem/B
题意:
给一张有向图G,求一个结点集数最大的结点集,是的该结点集中任意两个结点 u 和 v,满足: 要么 u 能到达 v,要么 v 能到达 u 或者 u 和 v 可以互达 ;
这个和有向强连通图很像,连通方式改了,强连通分量是 任意 两点 之间 都可以互达。可以发现一个强连通分量 ,要么全选,要么全部选。
思路:
把一个强连通分量看成一个结点,这个结点有权值,是他的大小,把每个强连通分量看成一个结点,这样 SCC 图就出来了,SCC图 他是一个有向无环图 DAG。
于是就可以用 dp 来做。
坑点:(数据有可能一个结点都没有)
- #include <bits/stdc++.h>
- using namespace std;
- const int Maxn = + ;
- vector<int> G[Maxn];
- int pre[Maxn];
- int lowlink[Maxn];
- int sccno[Maxn];
- int dfs_clock;
- int scc_cnt;
- int n,m;
- stack<int> S;
- void dfs(int u)
- {
- pre[u] = lowlink[u] = ++dfs_clock;
- S.push(u);
- for(int i = ; i < G[u].size(); i++)
- {
- int v = G[u][i];
- 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++;
- for(;;)
- {
- int x = S.top();
- S.pop();
- sccno[x] = scc_cnt;
- if(x == u) break;
- }
- }
- }
- void find_scc(int)
- {
- dfs_clock = scc_cnt = ;
- memset(pre,,sizeof(pre));
- memset(sccno,,sizeof(sccno));
- for(int i=; i<n; i++)
- {
- if(!pre[i])
- dfs(i);
- }
- }
- int size[Maxn], TG[Maxn][Maxn];
- int d[Maxn];
- int dp(int u)
- {
- int& ans = d[u];
- if(ans >= ) return ans;
- ans = size[u];
- for(int v = ; v <= scc_cnt; v++)
- if(u != v && TG[u][v])
- ans = max(ans, dp(v) + size[u]);
- return ans;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&n,&m);
- for(int i=; i<n; i++)
- G[i].clear();
- for(int i=; i<m; i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- u--;
- v--;
- G[u].push_back(v);
- }
- find_scc(n);
- memset(size,,sizeof(size));
- memset(TG,,sizeof(TG));
- for(int i=; i<n; i++)
- {
- size[sccno[i]] ++;
- for(int j=; j<G[i].size(); j++)
- {
- TG[sccno[i]][sccno[G[i][j]]] = ;
- }
- }
- int ans = ;
- memset(d,-,sizeof(d));
- for(int i=; i<=scc_cnt; i++)
- ans = max(ans,dp(i));
- printf("%d\n",ans);
- }
- return ;
- }
Uva 11324 最大团的更多相关文章
- UVa 11324 最大团(强连通分量缩点)
https://vjudge.net/problem/UVA-11324 题意:给一张有向图G,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v,要么v可以达到u. 思 ...
- uva 11324 The Largest Clique
vjudge 上题目链接:uva 11324 scc + dp,根据大白书上的思路:" 同一个强连通分量中的点要么都选,要么不选.把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它 ...
- UVA 11324 - The Largest Clique(强连通分量+缩点)
UVA 11324 - The Largest Clique 题目链接 题意:给定一个有向图,要求找一个集合,使得集合内随意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点 思路:强连通分 ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
- 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(缩点+DAG上的dp)
求最大团.和等价性证明有类似之处,只不过这个不是求互推,而是只要a->b,或b->a即可. 同样的,容易想到先缩点,得到DAG,每个节点上保存SCC的点数,相信任意一条由根节点(入度为零) ...
- UVa 11324 & 强联通分量+DP
题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.
- uva 11324
Problem B: The Largest Clique Given a directed graph G, consider the following transformation. First ...
- uva 11324 The Largest Clique (Tarjan+记忆化)
/*每个环 要么不选 要么全选 可缩点 就得到一个GAD图 然后搞搞算出最大路径*/ #include<iostream> #include<cstdio> #include& ...
随机推荐
- log4net 配置应用
(一). WinForm 或者 WPF 中的配置和应用 <?xml version="1.0" encoding="utf-8" ?> <co ...
- 关于java多线程
package testSynchronized; /** * * 当使用this也就是该文件中的testclass对象作为对象锁时, * 两个线程都使用该对象锁访问该对象的同步代码块, * 是顺序执 ...
- PHP- 数字转汉字
//数字转汉字 function number2Chinese($num, $m = 1) { switch($m) { case 0: $CNum = array( array('零','壹','贰 ...
- dubbo 试用全过程
概述: dubbo服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源. 服务容器只 ...
- 蓝牙—RFCOMM协议
RFCOMM是一个简单的协议,其中针对9针RS-232串口仿真附加了部分条款.可支持在两个蓝牙设备之间同时保持高达60路的通信连接.RFCOMM的目的是针对如何在两个不同设备上的应用之间保证一条完整的 ...
- JDBC操作
String sql = "SELECT * from lib where name = ?";List<Lib> list = getJdbcTemplate().q ...
- 移动表格行 解决低版本IE fadeIn fadeOut 失效问题
在维护一个内部使用的web工具的时候,需要在表格里配置参数,并且支持参数列的上下移动,有jQuery-UI工具支持对表格列的拖动,但是此处不追求效果,而且旧系统页面兼容性很差,无奈只能做上下移动的按钮 ...
- C#的默认可访问性级别
1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型.2.在一个类里面,属性和方法默认是private的,可以显示的定义为publ ...
- git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree fetch origin
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree fetch origi ...
- CAShapeLayer(持续更新)
CAShapeLayer 之前讲过CALayer动画相关知识,再来看看更加复杂的CAShapeLayer相关的动画知识. 普通CALayer在被初始化时是需要给一个frame值的,这个frame值一般 ...