给出n个点m条边的有向图,问至少添加多少条边使得任何点都可以从s点出发可达

#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pi pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
const int maxm=2e5+5;
const int inf=1e9;
int head[maxn],ver[maxm],nex[maxm],tot;
void inline AddEdge(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
}
int dfn[maxn],low[maxn],num,sccnum,scc[maxn],s[maxn],d[maxn],top;
void Tarjan(int x){
low[x]=dfn[x]=++num;
s[++top]=x;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(!dfn[y]) {
Tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(!scc[y]) low[x]=min(low[x],dfn[y]);//说明找到了一条反祖边
}
if(low[x]==dfn[x]) {
sccnum++;
while(s[top]!=x) {
scc[s[top]]=sccnum;
top--;
}
scc[s[top]]=sccnum;
top--;
}
}
int main(){
int n,m,s;
cin>>n>>m>>s;
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
AddEdge(x,y);
}
for(int i=1;i<=n;i++)
if(!dfn[i]) Tarjan(i);
for(int x=1;x<=n;x++){
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(scc[x]!=scc[y]){
d[scc[y]]++;
}
}
}
int ans=0;
for(int i=1;i<=sccnum;i++)
if(!d[i] && i!=scc[s]) ans++;
cout<<ans<<endl;
}

  

最新文章

  1. Content-Type: application/vnd.ms-excel&quot;&gt;
  2. 20160908_Redis主从复制Replication
  3. MySql与SqlServer的一些常用用法的差别
  4. SQL Server安装【转载】
  5. LINUX 笔记-VIM常用命令整理
  6. EBS值集,弹性域常用表
  7. Cocos2D遍历场景图(Scene Graph)
  8. java项目发布到linux服务器,tomcat正常启动但没加载项目
  9. echo 与 printf的区别与联系
  10. 20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结
  11. sqoop导出到hdfs
  12. 洛谷P1219 :八皇后(DFS+回溯)
  13. blob 对象 实现分片上传 及 显示进度条
  14. SpringBatch Sample (五)(复合格式文件的读、多文件的写)
  15. CMSZU站群管理系统 升级到 v1.8 [源码下载]
  16. Java编程的逻辑 (7) - 如何从乱码中恢复 (下)?
  17. oracel SQL多表查询优化
  18. Eclipse打开时“发现了以元素&#39;d:skin&#39;”开头的无效内容。此处不应含有子元素的解决方法
  19. hdu 1907(Nim博弈)
  20. mysql数据库目录存放位置更改

热门文章

  1. ios---剪裁圆形图片方法
  2. Arduino系列之智能家居蓝牙语音遥控灯(四)
  3. oracle的锁种类知识普及
  4. 03讲基础篇:经常说的CPU上下文切换是什么意思(上)
  5. java-zhisji
  6. rep stos 指令(Intel汇编)
  7. Markdown 教程
  8. postman之批量数据参数化(文件)
  9. Sklearn--(SVR)Regression学习笔记
  10. Spring Cloud(七):服务网关zuul过滤器