http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=25&page=show_problem&problem=2299

题意:输入n和m,有n个点和m条有向边,求出一个节点集合包括的节点个数最多,而且该节点内的不论什么两点a,b,要么a能到达b,要么b能到达a,要么a和b互相到达。

思路:强连通分量缩点形成有向无环图DAG,把缩点后的每一个点的权值置为该强连通分量的节点个数。最后在求DAG上的动态规划。

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stack>
#include <vector>
#define LL long long
#define _LL __int64 using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 1010; vector <int> edge[maxn],edge2[maxn];
int n,m;
int dfn[maxn],low[maxn],instack[maxn],dep,scc;
stack <int> st;
int set[maxn],num[maxn];
int d[maxn]; void init()
{
for(int i = 1; i <= n; i++)
{
edge[i].clear();
edge2[i].clear();
}
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(instack,0,sizeof(instack));
while(!st.empty()) st.pop(); dep = 0;
scc = 0;
memset(num,0,sizeof(num));
memset(d,0,sizeof(d));
} void tarjan(int u)
{
dfn[u] = low[u] = ++dep;
instack[u] = 1;
st.push(u); for(int i = 0; i < (int)edge[u].size(); i++)
{
int v = edge[u][i];
if(!dfn[v])
{
tarjan(v);
low[u] = min(low[u],low[v]);
}
else if(instack[v])
low[u] = min(low[u],dfn[v]);
}
if(dfn[u] == low[u])
{
scc++;
int t;
while(1)
{
t = st.top();
st.pop();
instack[t] = 0;
set[t] = scc;
num[scc]++;
if(t == u)
break;
}
}
} void creat()
{
for(int u = 1; u <= n; u++)
{
for(int i = 0; i < (int)edge[u].size(); i++)
{
int v = edge[u][i];
if(set[u] != set[v])
edge2[set[u]].push_back(set[v]);
}
}
} int dp(int u)
{
if(d[u]) return d[u];
else if(edge2[u].size() == 0) return d[u] = num[u]; int ans = 0;
for(int i = 0; i < (int)edge2[u].size(); i++)
{
int v = edge2[u][i];
ans = max(ans,dp(v));
}
return d[u] = ans+num[u];
} int main()
{
int test,u,v;
scanf("%d",&test);
while(test--)
{
init();
scanf("%d %d",&n,&m);
for(int i = 1; i <= m; i++)
{
scanf("%d %d",&u,&v);
if(u == v) continue;
edge[u].push_back(v);
}
for(int i = 1; i <= n; i++)
if(!dfn[i])
tarjan(i); creat(); int ans = 0;
for(int i = 1; i <= scc; i++)
{
ans = max(ans,dp(i));
}
printf("%d\n",ans);
}
return 0;
}

uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)的更多相关文章

  1. UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)

    题意:给定一个有向图,求出一个最大的结点集,这个节点集中的随意两个点之间至少一个能到达还有一个点. 思路:假设一个点在这个节点集中,那么它所在的强连通分量中的点一定所有在这个节点集中,反之亦然, 求出 ...

  2. UVa 11324 The Largest Clique (强连通分量+DP)

    题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u. 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩 ...

  3. UVA11324 The Largest Clique[强连通分量 缩点 DP]

    UVA - 11324 The Largest Clique 题意:求一个节点数最大的节点集,使任意两个节点至少从一个可以到另一个 同一个SCC要选一定全选 求SCC 缩点建一个新图得到一个DAG,直 ...

  4. UVA - 11324 The Largest Clique 强连通缩点+记忆化dp

    题目要求一个最大的弱联通图. 首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构. 对新图进行记忆化dp,求一条权值最长的链,每一个点的权值就是当前强连通分量点的个数. /* Tarja ...

  5. UVA - 11324 The Largest Clique (强连通缩点+dp)

    题目链接 题意:从有向图G中找到一个最大的点集,使得该点集中任意两个结点u,v满足u可达v或v可达u. 解法:先把同处于一个强连通分量中的结点合并(缩点),得到一张DAG图,在DAG上dp即可. 感觉 ...

  6. UVA11324 The Largest Clique —— 强连通分量 + 缩点 + DP

    题目链接:https://vjudge.net/problem/UVA-11324 题解: 题意:给出一张有向图,求一个结点数最大的结点集,使得任意两个结点u.v,要么u能到达v, 要么v能到达u(u ...

  7. UVa 11324 最大团(强连通分量缩点)

    https://vjudge.net/problem/UVA-11324 题意:给一张有向图G,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v,要么v可以达到u. 思 ...

  8. UVA 11324 - The Largest Clique(强连通分量+缩点)

    UVA 11324 - The Largest Clique 题目链接 题意:给定一个有向图,要求找一个集合,使得集合内随意两点(u, v)要么u能到v,要么v能到u,问最大能选几个点 思路:强连通分 ...

  9. 训练赛 Grouping(强连通分量缩点 + DAG求最长路)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=158#problem/F 大致题意:给出n个人和m种关系(ti,si),表示ti ...

随机推荐

  1. vs2010 please select a valid location in the repository

    vs2010 please select a valid location in the repository AnkhSvn版本有问题,我后来使用2.1就ok了记录一下

  2. ACE的 日志

    http://wenku.baidu.com/link?url=dK6j9_0pICRjxWW7usBlkCxPTa8zFSPyUe_uWAkwMPFDU4ip_tEfxpOitxjkl3RuPy3D ...

  3. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 select_from_list_by_label(self, locator, *labels)

    def select_from_list_by_label(self, locator, *labels): """Selects `*labels` from list ...

  4. CListCtrl总结.xml

    pre{ line-height:1; color:#d1653c; background-color:#000000; font-size:16px;}.sysFunc{color:#566d68; ...

  5. 【LeetCode】101 - Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  6. 朝鲜RedStar_OS_3.0安装图解

    前天exploit-db上出现了3个Local Exploit,都是来自朝鲜的RedStar 3.0的vul.网上也下到了镜像,按网上的方法测试了下,真的是 ————————————————————— ...

  7. Embedded之memory type

    1 Types of memory 2 Characteristics

  8. wpf4 文字 模糊 不清晰 解决方法

    在窗口或控件上设置字体属性就可以了,如下:<UserControl x:Class="..."             xmlns="http://schemas. ...

  9. Hadoop2学习记录(1) |HA完全分布式集群搭建

    准备 系统:CentOS 6或者RedHat 6(这里用的是64位操作) 软件:JDK 1.7.hadoop-2.3.0.native64位包(可以再csdn上下载,这里不提供了) 部署规划 192. ...

  10. nova 配置文件

    控制节点 /etc/nova/nova.conf [DEFAULT]cpu_allocation_ratio=32.0service_down_time = 7200#use_local = True ...