poj1236是问把一棵树变成强联通分量,于是答案就是rudu为0的和出度为0的最大值,因为假设入度为0的多一些,先每个出度为0的连接一个入度为0的,那么还剩一些入度为0的,这时候入度为0的随意连接一些出度为0的,都可以通过不停地绕绕绕绕成为一个强联通分量。

这题是把一个有向图变成强联通分量,先把他们缩点,变成很多棵树,然后再求入度为0,和出度为0的总点数那个多,虽然他们是很多棵树的入度点和出度点,但是是一样的,最后总能绕绕绕绕绕变成强联通分量,不需要去管他们是哪棵树上的。

#include<cstdio>
#include<cstring>
#define maxl 10010
#define maxm 100010int n,m,top,ans,cnt,ff,num;
int rudu[maxl],out[maxl],f[maxl],dfn[maxl],low[maxl],s[maxl],ehead[maxl];
struct ed{int to,nxt;} e[maxm];
bool in[maxl];void prework()
{scanf("%d%d",&n,&m);memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(ehead,0,sizeof(ehead));memset(rudu,0,sizeof(rudu));memset(out,0,sizeof(out));int u,v;for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);e[i].to=v;e[i].nxt=ehead[u];ehead[u]=i;}}void tarjan(int u)
{int v;s[++top]=u;in[u]=true;dfn[u]=low[u]=++num;for(int i=ehead[u];i;i=e[i].nxt){v=e[i].to;if(!dfn[v]){tarjan(v);if(low[v]<low[u])low[u]=low[v];}elseif(in[v] && dfn[v]<low[u])low[u]=dfn[v];}if(dfn[u]==low[u]){ff++;do{v=s[top];s[top]=0;top--;f[v]=ff;in[v]=false;}while(v!=u);}
}inline int max(int a,int b)
{if(a>b)return a;elsereturn b;
}void mainwork()
{memset(in,false,sizeof(in));num=0;top=0;ff=0;for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);int v;for(int u=1;u<=n;u++)for(int i=ehead[u];i;i=e[i].nxt){v=e[i].to;if(f[u]!=f[v])out[f[u]]++,rudu[f[v]]++;}int root=0,leaf=0;for(int i=1;i<=ff;i++){if(rudu[i]==0) root++;if(out[i]==0) leaf++;}if(ff==1)ans=0;elseans=max(root,leaf);
}void print()
{printf("%d\n",ans);
}int main()
{int t;scanf("%d",&t);for(int i=1;i<=t;i++){prework();mainwork();print();}return 0;
}

2017acm乌鲁木齐赛区网络赛F题tarjan缩点相关推荐

  1. 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题Skiing(拓扑序求DAG最长路)

    题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可. 代码: # ...

  2. ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题)

    ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题) 1.题目描写叙述:点击打开链接 2.解题思路:本题是四色定理的模板题.只是有几种情况要提前特判一下:n==1直 ...

  3. hdu5455(2015沈阳网络赛F题)

    题意: 给出一个串,问用题中定义的那些串来组成这个串最少要用多少个. 思路: 没啥说的,注意一下输入的串中可能出现除了c和f的字母. 代码: #include<cstdio> #inclu ...

  4. hdu5489(2015合肥网络赛F题)

    转载自:http://blog.csdn.net/lwt36/article/details/48774103 题意: 给出一个数列,在其中删除连续的L个数字,使得剩余的数字LIS最大,输出此LIS. ...

  5. hdu5442(2015长春网络赛F题)

    题意: 给出一个字符串,只由'a'~'z'组成,字符串是一个首尾相接的串.我们要找到一个起点,顺时针或者逆时针的读这个串,找到字典序最大的读法,如果有多种,输出起点坐标小的那个,如果起点坐标一样,输出 ...

  6. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛B: Out-out-control cars

    问题 B: Out-out-control cars 题目描述 Two out-of-control cars crashed within about a half-hour Wednesday a ...

  7. Skiing(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H)

    Problem Description In this winter holiday, Bob has a plan for skiing at the mountain resort. This s ...

  8. HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)

    1.题目描述:点击打开链接 2.解题思路:本题利用线段树解决,根据题意,我们需要建立两棵线段树,分别维护主对角线,副对角线.每个线段树的结点需要维护sum,sumL,sumR,其中,sum表示当前区间 ...

  9. 2011 ACM/ICPC 福州赛区网络赛解题报告

    第一次写网络赛的题解,福州赛区网络赛作为我第一年ACM最后一次网络赛酱油,画了一个很像逗号的句号.....好吧,还得为北京现场赛准备啊准备....... 这次酱油打的很犀利,貌似出第一题很快,之后节奏 ...

最新文章

  1. 实现AI技术自立自强,国产深度学习框架面临三大难题
  2. 炉石传说 C# 设计文档(序)
  3. Servlet / Tomcat / Spring 之间的关系
  4. CSS基础学习-8.CSS盒子模型_标准盒子9.CSS怪异盒子
  5. oracle中ci是什么意思,enq: CI - contention(附AWR)
  6. 客观地认识程序员心中的恐惧
  7. 算法面试|论如何4个月高效刷满 500 题并形成长期记忆
  8. 枚举遍历法,你能循环遍历所有的枚举值吗?
  9. 如何在MyEclipse中显示行数
  10. 全网最全Python操作Excel教程,建议收藏!
  11. 动我 Java?是时候让甲骨文退休了!
  12. paypal如何支付欧元_国际在线支付巨头——PayPal
  13. Spring WebFlux – SpringReact式编程
  14. 图像分割标注数据labelme解析时报错【Python已停止工作Windows正在检查该问题的解决方案...】【ValueError: Too many dimensions: 3 > 2】
  15. tftp协议给服务器上传数据,TFTP连接过程详解
  16. linux3d游戏,笔记本linux系统能玩3d游戏吗?
  17. k8s出现问题导致cpu使用率过高
  18. 硬盘分区-增加C盘容量教程
  19. 如何写好一个2Take1 Lua - Lua的基本语法
  20. 【模电知识总结】MOS管

热门文章

  1. 几何画板v5.0.6源文件(破解成功)
  2. jQuery系列 第三章 jQuery框架操作CSS
  3. 淘宝arduino虚拟键盘开发环境及对应键盘按键代码
  4. C# System.Diagnostics.Stopwatch 记录程序执行时间
  5. 综合布线系统---常见机柜尺寸
  6. 如何禁用Windows Media Player指南
  7. PhotoShopCs5启动 需要使用Adobe Application Manager 启动试用版
  8. 一篇好的技术文章特点
  9. 2011,仰望那烂漫的冬花
  10. 单摆运动模拟程序C语言,单摆C语言程序代码