还是强连通分量的题目,但是这个题目不同的在于,问你最少要添加多少条有向边,使得整个图变成一个强连通分量

然后结论是,找到那些入度为0的点的数目 和 出度为0的点的数目,取其最大值即可,怎么证明嘛。。。我也不好怎么证,不过细细一琢磨发现就是这样,改天找聪哥一起探讨下怎么证明

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
using namespace std;
const int N=20010;
int pre[N],lowlink[N],sccno[N];
vector<int>G[N],G2[N];
stack<int> sta;
int n,m,vis[N],scc_cnt,dfs_clk;
int ind[N],outd[N];
void init()
{
for (int i=0;i<=n;i++){
pre[i]=0;
lowlink[i]=0;
sccno[i]=0;
G[i].clear();
G2[i].clear();
vis[i]=0;
scc_cnt=dfs_clk=0;
ind[i]=outd[i]=0;
}
}
void dfs(int u)
{
pre[u]=lowlink[u]=++dfs_clk;
sta.push(u);
for (int i=0;i<G[u].size();i++){
int v=G[u][i];
if (!pre[v]){
dfs(v);
lowlink[u]=min(lowlink[u],lowlink[v]);
}
else if (!sccno[v]){
lowlink[u]=min(lowlink[u],pre[v]);
}
}
if (lowlink[u]==pre[u]){
scc_cnt++;
for (;;){
int x=sta.top();sta.pop();
sccno[x]=scc_cnt;
if (x==u) break;
}
}
}
void tarjan()
{
for (int i=1;i<=n;i++){
if (!pre[i]) dfs(i);
}
for (int i=1;i<=n;i++){
int u=sccno[i];
for (int j=0;j<G[i].size();j++){
int v=G[i][j];
v=sccno[v];
if (u!=v){
G2[u].push_back(v);
ind[v]++;
outd[u]++;
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
init();
int a,b;
while (m--){
scanf("%d%d",&a,&b);
G[a].push_back(b);
}
tarjan();
if (scc_cnt==1){
puts("0");
continue;
}
int ans1=0,ans2=0;
for (int i=1;i<=scc_cnt;i++){
if (ind[i]==0) ans1++;
if (outd[i]==0) ans2++;
}
printf("%d\n",max(ans1,ans2));
}
return 0;
}

  

最新文章

  1. Compile FreeCAD on Windows
  2. Atitit.木马病毒websql的原理跟个设计
  3. 使用Maven来写j2ee项目
  4. 记在centos中连接无线网络的一次过程
  5. RedHat 7配置yum源
  6. poj-1782 Run Length Encoding
  7. 【转】SecureCRT 实用配置----不错
  8. POJ--3268--Silver Cow Party【SPFA+邻接表】
  9. C# 语言规范_版本5.0 (第20章 附录B_语法)
  10. 【摘自网络】dll库和lib库有什么区别
  11. 快速查询List中指定的数据
  12. flask 项目基本框架的搭建
  13. maven工程下get的URI中带中文名称乱码解决
  14. ubuntu 精简配置
  15. java基础篇---异常处理
  16. sqoop学习笔记
  17. Django实战(7):改造ProductList界面
  18. [译]C语言实现一个简易的Hash table(5)
  19. 冲刺ing-5
  20. Apache Kafka源码分析 &ndash; Replica and Partition

热门文章

  1. C. Maximum Median 二分
  2. ADV-299 宰羊 (java,过了30%)
  3. Vue二次精度随笔(1)
  4. 使用redis集群中遇到的错误
  5. 前端学习笔记系列一:5 在项目中引入阿里图标icon
  6. Android按返回键退出程序
  7. CSS-text-intent
  8. POJ 3233:Matrix Power Series 矩阵快速幂 乘积
  9. upper_bound()和low_bound函数的基本使用和理解(转载,已获博主授权)
  10. idea-plugin-easycode