题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点。

其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了。

那么问题就简单了,强连通分量缩点,强连通分量必定要一起留下,从入度0到出度0的强连通分量找到一条包含最多点的通路即可。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. #define MAXN 1111
  6. #define MAXM 55000
  7. struct Edge{
  8. int u,v,next;
  9. }edge[MAXM];
  10. int NE,head[MAXN];
  11. void addEdge(int u,int v){
  12. edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
  13. head[u]=NE++;
  14. }
  15. int top,stack[MAXN];
  16. bool instack[MAXN];
  17. int dn,dfn[MAXN],low[MAXN];
  18. int bn,belong[MAXN],size[MAXN];
  19. void tarjan(int u){
  20. dfn[u]=low[u]=++dn;
  21. stack[++top]=u; instack[u]=;
  22. for(int i=head[u]; i!=-; i=edge[i].next){
  23. int v=edge[i].v;
  24. if(dfn[v]==){
  25. tarjan(v);
  26. low[u]=min(low[u],low[v]);
  27. }else if(instack[v]){
  28. low[u]=min(low[u],dfn[v]);
  29. }
  30. }
  31. if(low[u]==dfn[u]){
  32. int v; ++bn;
  33. do{
  34. v=stack[top--];
  35. instack[v]=;
  36. belong[v]=bn;
  37. ++size[bn];
  38. }while(u!=v);
  39. }
  40. }
  41. int d[MAXN];
  42. int dfs(int u){
  43. if(d[u]) return d[u];
  44. int res=;
  45. for(int i=head[u]; i!=-; i=edge[i].next){
  46. int v=edge[i].v;
  47. res=max(res,dfs(v));
  48. }
  49. return d[u]=res+size[u];
  50. }
  51. int main(){
  52. int t,n,m,a,b;
  53. scanf("%d",&t);
  54. while(t--){
  55. scanf("%d%d",&n,&m);
  56. NE=;
  57. memset(head,-,sizeof(head));
  58. while(m--){
  59. scanf("%d%d",&a,&b);
  60. addEdge(a,b);
  61. }
  62. top=dn=bn=;
  63. memset(dfn,,sizeof(dfn));
  64. memset(instack,,sizeof(instack));
  65. memset(size,,sizeof(size));
  66. for(int i=; i<=n; ++i){
  67. if(dfn[i]==) tarjan(i);
  68. }
  69. int tmp=NE; NE=;
  70. memset(head,-,sizeof(head));
  71. for(int i=; i<tmp; ++i){
  72. int u=belong[edge[i].u],v=belong[edge[i].v];
  73. if(u==v) continue;
  74. addEdge(u,v);
  75. }
  76. memset(d,,sizeof(d));
  77. int res=;
  78. for(int i=; i<=bn; ++i){
  79. res=max(res,dfs(i));
  80. }
  81. printf("%d\n",res);
  82. }
  83. return ;
  84. }

UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)的更多相关文章

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

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

  2. ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)

    题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...

  3. LightOJ1417 Forwarding Emails(强连通分量+缩点+记忆化搜索)

    题目大概是,每个人收到信息后会把信息发给他认识的一个人如此下去,问一开始要把信息发送给谁这样看到信息的人数最多. 首先找出图中的SCC并记录每个SCC里面的点数,如果传到一个SCC,那么里面的人都可以 ...

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

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

  5. uva 11324 The Largest Clique(强连通分量缩点+DAG动态规划)

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

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

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

  7. UVA11324 The Largest Clique (强连通缩点+DP最长路)

    <题目链接> 题目大意: 给你一张有向图 G,求一个结点数最大的结点集,使得该结点集中的任意两个结点 u 和 v 满足:要么 u 可以达 v,要么 v 可以达 u(u,v相互可达也行). ...

  8. uva11324 The Largest Clique --- 强连通+dp

    给一个有向图G,求一个子图要求当中随意两点至少有一边可达. 问这个子图中最多含多少个顶点. 首先找SCC缩点建图.每一个点的权值就是该点包括点的个数. 要求当中随意两点可达,实际上全部边仅仅能同方向, ...

  9. BNU 20860——Forwarding Emails——————【强连通图缩点+记忆化搜索】

    Forwarding Emails Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...

随机推荐

  1. 硬盘安装ubuntu注意事项

    按照教程 http://teliute.org/linux/Ubsetup/jichu3/jichu3.html 安装64位ubuntu的时候,因为64位版本的iso安装包里没有vmlinuz文件,而 ...

  2. Java--读写文件综合

    package javatest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  3. Android自定义dialogdemo

    很多时候,我们需要自己去定义dialog,目前我们就遇见了这样一个需求,我的想法是自己定义一个dialog,如果有list的话就使用listview,如果有msg的话就使用msg,并且取消和确定按钮也 ...

  4. 25.在从1到n的正数中1出现的次数[NumberOf1Between1_N]

    [题目] 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. [分析] 这是一道广为流传的goo ...

  5. chrome浏览器关闭标签页面

    chrome浏览器关闭标签页提示:Scripts may close only the windows that were opened by it. 解决办法:通过open方法进行关闭. open( ...

  6. 【转】如何用 Chrome for Android 做远程遥控 debugging

    http://blog.csdn.net/wuchengzhi82/article/details/22190435

  7. java文件上传路径缺少\的解决办法

    今天做一个文件上传,取路径,然后读取文件的时候,发现存储到MySQL的路径是这样的:

  8. [Android Pro] android Flag介绍

    一些Flag的介绍 窗口之后的内容变暗. public static final int FLAG_DIM_BEHIND       = 0x00000002; 窗口之后的内容变模糊. public ...

  9. Codeforces Round #321 (Div. 2)C(tree dfs)

    题意:给出一棵树,共有n个节点,其中根节点是Kefa的家,叶子是restaurant,a[i]....a[n]表示i节点是否有猫,问:Kefa要去restaurant并且不能连续经过m个有猫的节点有多 ...

  10. linux svn客户端 常用命令

    查看文件或者目录状态: [root@v01 ~]# svn status online/ #正常情况下没显示 [root@v01 ~]# svn status online/ #如果有变动会有如下显示 ...