https://vjudge.net/problem/UVA-11324

题意:
给一张有向图G,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足,要么u可以到达v,要么v可以达到u。

思路:

找到SCC后进行缩点建图,每个点的权值则为其连通分量的点数,这样就是找DAG上一条最大路径,DP解决。

  1 #include<iostream>
  2 #include<algorithm>
  3 #include<cstring>
  4 #include<cstdio>
  5 #include<vector>
  6 #include<stack>
  7 #include<queue>
  8 #include<cmath>
  9 using namespace std;
 10
 11 const int maxn=1000+5;
 12
 13 int n,m;
 14
 15 vector<int> G[maxn];
 16 int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;
 17 int num[maxn];
 18 int map[maxn][maxn];
 19 int d[maxn];
 20 stack<int> S;
 21
 22 void dfs(int u)
 23 {
 24     pre[u]=lowlink[u]=++dfs_clock;
 25     S.push(u);
 26     for(int i=0;i<G[u].size();i++)
 27     {
 28         int v=G[u][i];
 29         if(!pre[v])
 30         {
 31             dfs(v);
 32             lowlink[u]=min(lowlink[u],lowlink[v]);
 33         }
 34         else if(!sccno[v])
 35         {
 36             lowlink[u]=min(lowlink[u],pre[v]);
 37         }
 38     }
 39     if(lowlink[u]==pre[u])
 40     {
 41         scc_cnt++;
 42         for(;;)
 43         {
 44             int x=S.top(); S.pop();
 45             sccno[x]=scc_cnt;
 46             if(x==u)  break;
 47         }
 48     }
 49 }
 50
 51 void find_scc()
 52 {
 53     dfs_clock=scc_cnt=0;
 54     memset(sccno,0,sizeof(sccno));
 55     memset(pre,0,sizeof(pre));
 56     for(int i=0;i<n;i++)
 57         if(!pre[i])  dfs(i);
 58 }
 59
 60 int dp(int u)
 61 {
 62     int& ans=d[u];
 63     if(ans!=-1)   return ans;
 64     ans=num[u];
 65     for(int i=1;i<=scc_cnt;i++)
 66     {
 67         if(i!=u && map[u][i])   ans=max(ans,num[u]+dp(i));
 68     }
 69     return ans;
 70 }
 71
 72 int main()
 73 {
 74     //freopen("D:\\input.txt","r",stdin);
 75     int T;
 76     scanf("%d",&T);
 77     while(T--)
 78     {
 79         scanf("%d%d",&n,&m);
 80         for(int i=0;i<n;i++)  G[i].clear();
 81         while(m--)
 82         {
 83             int u,v;
 84             scanf("%d%d",&u,&v);
 85             u--; v--;
 86             G[u].push_back(v);
 87         }
 88         find_scc();
 89         memset(num,0,sizeof(num));
 90         memset(map,0,sizeof(map));
 91         for(int i=0;i<n;i++)
 92             num[sccno[i]]++;
 93         for(int u=0;u<n;u++)
 94         {
 95             for(int i=0;i<G[u].size();i++)
 96             {
 97                 int x=sccno[u];
 98                 int y=sccno[G[u][i]];
 99                 map[x][y]=1;
100             }
101         }
102         int ans=0;
103         memset(d,-1,sizeof(d));
104         for(int i=1;i<=scc_cnt;i++)
105             ans=max(ans,dp(i));
106         printf("%d\n",ans);
107     }
108     return 0;
109 }

转载于:https://www.cnblogs.com/zyb993963526/p/6798234.html

UVa 11324 最大团(强连通分量缩点)相关推荐

  1. POJ1236Network of Schools——强连通分量缩点建图

    [题目描述] A number of schools are connected to a computer network. Agreements have been developed among ...

  2. HDU 5934:Boom——强连通分量+缩点

    [题目描述] There are N bombs needing exploding.Each bomb has three attributes: exploding radius ri, posi ...

  3. 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。...

    题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...

  4. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  5. UVA 1324 The Largest Clique 最大团(强连通分量,变形)

    题意:给一个有向图,要求找出一些点,使得这些点中的任意点对,要么可以互通,要么单向可达. 思路:最低只要求单向可达即可,即a->b都可以算进去. 强连通分量内的点肯定是满足要求的,可以全选,但是 ...

  6. tarjan算法总结 (强连通分量+缩点+割点),看这一篇就够了~

    文章目录 一.tarjan求强连通分量 1:算法流程 2:模板 二.tarjan缩点 1:相关定义 2:算法流程 三.tarjan求割点.桥 1.什么是割点 2.割点怎么求? 3.割点tarjan模板 ...

  7. Tarjan算法超超超详解(ACM/OI)(强连通分量/缩点)(图论)(C++)

    本文将持续更新. I 前置芝士:深度优先搜索与边的分类 首先我们来写一段基本的DFS算法(采用链式前向星存图): bool vis[MAXN];void dfs(int u) {vis[u] = tr ...

  8. Jzoj P4253 QYQ在艾泽拉斯___强连通分量缩点+拓扑序dp

    题目大意: Q Y Q QYQ QYQ有 K K K次技能,每次可以从一个岛屿上闪现到另外一个岛屿上,每一个岛屿只能登上一次. Q Y Q QYQ QYQ能从任何一个城市开始旅程,也能在任何一个城市结 ...

  9. POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...

  10. POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)

    Description: A number of schools are connected to a computer network. Agreements have been developed ...

最新文章

  1. FreeMarker基本语法详解及模板文件的组成(二)
  2. mysql新增json_MySQL5.7中新增的JSON类型的使用方法
  3. c++ 字典_python字典详解-超级完整版
  4. hdu3329 二分+搜索
  5. 阿里云linux centos 一键部署web环境--图文详解
  6. 如何实现DataGridView实时更新数据【Z】
  7. Meeting HDU - 5521
  8. Vue 项目结构介绍
  9. Git学习总结(22)——Git 常用操作再总结
  10. 【bzoj4355】Play with sequence 线段树区间最值操作
  11. SWUST OJ(953)
  12. Atitit 简历外语版 英语 日语 1.经历了很多项目实践,具备较为宽广的IT从业与信息化工作背景,具备若干创业历程,道路曲折,初心不改。在相关领域累计了较深的深度(细化度)与高度(抽象度)与广度
  13. java怎么运行_java怎么运行
  14. 中英文网站googleSEO优化技巧
  15. 百度网盘永久分享链接-注册电气工程师(注电)历年考试真题PDF, Word版资料(含答案), 相关视频资料
  16. SHFileOperation复制文件夹、文件用法
  17. html蔚蓝网注册页面,如何在网站中添加手机短信验证码注册功能?
  18. 基于JDE的目标跟踪算法前沿研究跟进
  19. 《码农翻身》用故事给技术加点料
  20. 凯文.都迪的超级记忆力训练教程

热门文章

  1. uva10617 - Again Palindrome(dp)
  2. 汇编的艺术(01)sizeof operator
  3. 齐博V7仿爱丽图库模板(含齐博图库V1.0模板)
  4. Interactive Reflection Editing (SIGGRAPH ASIA 09)
  5. PP团队圣经巨著《Application Architecture Guide2.0》14章-数据访问层
  6. 【前端面试】HTML5+CSS3初级面试1
  7. [tensorflow] - csv文件读取
  8. Python 杨辉三角形的简单实现
  9. eclipse maven jetty插件方式启动项目
  10. Linux下samba服务的错误处理