hdu 2767
这也是道强连通分量的题;
题目要求我们求出最少需要添加多少条边让整个图变成一个强连通分量;
思路很简单,直接缩点,然后找出所有点中有多少出度为0,入度为0的点,最大的那个就是题目所求;
贴代码:
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#include<stack>
#define maxn 50005
using namespace std;
vector<int>ve[maxn];
int dfn[maxn],low[maxn],ans,n,m,nncount,b[maxn];
int from[maxn],to[maxn],cntin[maxn],cntout[maxn];
bool instack[maxn];
stack<int>q; void tarjin(int x)
{
dfn[x]=low[x]=++nncount;
instack[x]=;
q.push(x);
int l=ve[x].size();
for(int i=; i<l; i++)
{
int v=ve[x][i];
if(!dfn[v])
{
tarjin(v);
low[x]=min(low[x],low[v]);
}
else if(instack[v])
low[x]=min(low[x],dfn[v]);
}
if(low[x]==dfn[x])
{
ans++;
int v;
do
{
v=q.top();
q.pop();
b[v]=ans;
instack[v]=;
}while(v!=x);
}
} int main()
{
int x,y,t,mm1,mm2;
scanf("%d",&t);
while(t--)
{
memset(cntin,,sizeof cntin);
memset(cntout,,sizeof cntout);
memset(b,,sizeof b);
memset(dfn,,sizeof dfn);
memset(low,,sizeof low);
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
{
ve[i].clear();
instack[i]=;
}
while(!q.empty()) q.pop();
for(int i=; i<=m; i++)
{
scanf("%d%d",&x,&y);
ve[x].push_back(y);
from[i]=x,to[i]=y;
}
nncount=ans=mm1=mm2=;
for(int i=; i<=n; i++)
if(!dfn[i]) tarjin(i);
if(ans==){printf("0\n");continue;}
for(int i=;i<=m;i++)
{
x=b[from[i]],y=b[to[i]];
if(x!=y) cntout[x]++,cntin[y]++;
}
for(int i=;i<=ans;i++)
{
if(!cntin[i]) mm1++;
if(!cntout[i]) mm2++;
}
printf("%d\n",max(mm1,mm2));
}
return ;
}
hdu 2767的更多相关文章
- 有向图 加最少的边 成为强连通分量的证明 poj 1236 hdu 2767
poj 1236: 题目大意:给出一个有向图, 任务一: 求最少的点,使得从这些点出发可以遍历整张图 任务二: 求最少加多少边 使整个图变成一个强连通分量. 首先任务一很好做, 只要缩点 之后 求 ...
- HDU 2767:Proving Equivalences(强连通)
http://acm.hdu.edu.cn/showproblem.php?pid=2767 题意:给出n个点m条边,问在m条边的基础上,最小再添加多少条边可以让图变成强连通.思路:强连通分量缩点后找 ...
- HDU 2767 Proving Equivalences (强联通)
pid=2767">http://acm.hdu.edu.cn/showproblem.php?pid=2767 Proving Equivalences Time Limit: 40 ...
- hdu 2767 Proving Equivalences(tarjan缩点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2767 题意:问最少加多少边可以让所有点都相互连通. 题解:如果强连通分量就1个直接输出0,否者输出入度 ...
- 强联通 HDU 2767 3836
n个点m条边 最少需要几条边变成强连通图 设有a个结点的入读为0, b个结点的出度为0, 则 max{a, b}就是答案. 注意特殊情况: 当原图已经强连通时, 答案是0而不是1. 加一条边少一个入度 ...
- hdu 2767 Proving Equivalences
Proving Equivalences 题意:输入一个有向图(强连通图就是定义在有向图上的),有n(1 ≤ n ≤ 20000)个节点和m(0 ≤ m ≤ 50000)条有向边:问添加几条边可使图变 ...
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- HDU 2767 Proving Equivalences(至少增加多少条边使得有向图变成强连通图)
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2767 Proving Equivalences (Tarjan)
Proving Equivalences Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other ...
随机推荐
- PHP计算2点经纬度之间的距离
hp] view plaincopy function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longit ...
- jqery筛选
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 20151225jquery学习笔记---编辑器插件
编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML格式的.分类纯 JS 类型的,还有 jQuery 插件类型的.一. 编辑器简介我们使用的 jQuery 版本 ...
- 关于bootstrap的datepicker在meteor应用中的使用(不包含bootstrap框架)
1.安装bootstrap3-datepicker包 meteor add rajit:bootstrap3-datepicker 2.使用方法 Example In your handlebars ...
- NFS文件共享系统
1.NFS介绍 NFS是Network File System的缩写,主要功能是通过网络让不同的机器系统之间可以彼此共享文件或目录.NFS服务器可以允许NFS客户端将远端NFS服务端的共享目录挂载到本 ...
- iOS 动画基础
原文:http://www.cnblogs.com/lujianwenance/p/5733846.html 今天说一下有关动画的基础,希望能帮助到一些刚接触iOS动画或者刚开始学习iOS的同学, ...
- js和css分别实现透明度的动画实现
js实现 两个函数 即setInterval和setTimeout setTimeout((function(){})(1/10),1*100) 该函数有两个参数,第一个为执行的函数,第二个为事件参数 ...
- 九度OJ 1082 代理服务器 -- 贪心算法
题目地址:http://ac.jobdu.com/problem.php?pid=1082 题目描述: 使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私.我们知道n个代理服务 ...
- IOS视图旋转可放大缩小
- (IBAction)hideBut:(id)sender { if (self.flg) { [UIView animateWithDuration:0.3 animations:^{ self. ...
- ajax的访问 WebService 的方法
如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name= "HttpPo ...