2017acm乌鲁木齐赛区网络赛F题tarjan缩点
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缩点相关推荐
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛H题Skiing(拓扑序求DAG最长路)
题意: 给定一个有向无环图,求该图的最长路. 思路: 由于是有向无环图,所以最长路肯定是一个入度为0到出度为0的路径,拓扑序在确定当前点之前能够考虑到所有到它的情况,所以最后取个最值即可. 代码: # ...
- ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题)
ZOJ 3810 A Volcanic Island (2014年牡丹江赛区网络赛B题) 1.题目描写叙述:点击打开链接 2.解题思路:本题是四色定理的模板题.只是有几种情况要提前特判一下:n==1直 ...
- hdu5455(2015沈阳网络赛F题)
题意: 给出一个串,问用题中定义的那些串来组成这个串最少要用多少个. 思路: 没啥说的,注意一下输入的串中可能出现除了c和f的字母. 代码: #include<cstdio> #inclu ...
- hdu5489(2015合肥网络赛F题)
转载自:http://blog.csdn.net/lwt36/article/details/48774103 题意: 给出一个数列,在其中删除连续的L个数字,使得剩余的数字LIS最大,输出此LIS. ...
- hdu5442(2015长春网络赛F题)
题意: 给出一个字符串,只由'a'~'z'组成,字符串是一个首尾相接的串.我们要找到一个起点,顺时针或者逆时针的读这个串,找到字典序最大的读法,如果有多种,输出起点坐标小的那个,如果起点坐标一样,输出 ...
- 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 ...
- Skiing(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H)
Problem Description In this winter holiday, Bob has a plan for skiing at the mountain resort. This s ...
- HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)
1.题目描述:点击打开链接 2.解题思路:本题利用线段树解决,根据题意,我们需要建立两棵线段树,分别维护主对角线,副对角线.每个线段树的结点需要维护sum,sumL,sumR,其中,sum表示当前区间 ...
- 2011 ACM/ICPC 福州赛区网络赛解题报告
第一次写网络赛的题解,福州赛区网络赛作为我第一年ACM最后一次网络赛酱油,画了一个很像逗号的句号.....好吧,还得为北京现场赛准备啊准备....... 这次酱油打的很犀利,貌似出第一题很快,之后节奏 ...
最新文章
- 实现AI技术自立自强,国产深度学习框架面临三大难题
- 炉石传说 C# 设计文档(序)
- Servlet / Tomcat / Spring 之间的关系
- CSS基础学习-8.CSS盒子模型_标准盒子9.CSS怪异盒子
- oracle中ci是什么意思,enq: CI - contention(附AWR)
- 客观地认识程序员心中的恐惧
- 算法面试|论如何4个月高效刷满 500 题并形成长期记忆
- 枚举遍历法,你能循环遍历所有的枚举值吗?
- 如何在MyEclipse中显示行数
- 全网最全Python操作Excel教程,建议收藏!
- 动我 Java?是时候让甲骨文退休了!
- paypal如何支付欧元_国际在线支付巨头——PayPal
- Spring WebFlux – SpringReact式编程
- 图像分割标注数据labelme解析时报错【Python已停止工作Windows正在检查该问题的解决方案...】【ValueError: Too many dimensions: 3 > 2】
- tftp协议给服务器上传数据,TFTP连接过程详解
- linux3d游戏,笔记本linux系统能玩3d游戏吗?
- k8s出现问题导致cpu使用率过高
- 硬盘分区-增加C盘容量教程
- 如何写好一个2Take1 Lua - Lua的基本语法
- 【模电知识总结】MOS管