hdu - 2667 Proving Equivalences(强连通)

http://acm.hdu.edu.cn/showproblem.php?pid=2767

求至少添加多少条边才能变成强连通分量.统计入度为0的点和出度为0的点,取最大值即可.

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cmath>
  4 #include <vector>
  5 #include <cstring>
  6 #include <algorithm>
  7 #include <string>
  8 #include <set>
  9 #include <functional>
 10 #include <numeric>
 11 #include <sstream>
 12 #include <stack>
 13 #include <map>
 14 #include <queue>
 15 
 16 #define CL(arr, val)    memset(arr, val, sizeof(arr))
 17 
 18 #define ll long long
 19 #define inf 0x7f7f7f7f
 20 #define lc l,m,rt<<1
 21 #define rc m + 1,r,rt<<1|1
 22 #define pi acos(-1.0)
 23 
 24 #define L(x)    (x) << 1
 25 #define R(x)    (x) << 1 | 1
 26 #define MID(l, r)   (l + r) >> 1
 27 #define Min(x, y)   (x) < (y) ? (x) : (y)
 28 #define Max(x, y)   (x) < (y) ? (y) : (x)
 29 #define E(x)        (1 << (x))
 30 #define iabs(x)     (x) < 0 ? -(x) : (x)
 31 #define OUT(x)  printf("%I64d\n", x)
 32 #define lowbit(x)   (x)&(-x)
 33 #define Read()  freopen("a.txt", "r", stdin)
 34 #define Write() freopen("dout.txt", "w", stdout);
 35 
 36 using namespace std;
 37 #define N 20100
 38 //N为最大点数
 39 #define M 50100
 40 //M为最大边数
 41 int n, m;//n m 为点数和边数
 42 
 43 struct Edge{
 44     int from, to, nex;
 45     bool sign;//是否为桥
 46 }edge[M<<1];
 47 int head[N], edgenum;
 48 void add(int u, int v){//边的起点和终点
 49     Edge E={u, v, head[u], false};
 50     edge[edgenum] = E;
 51     head[u] = edgenum++;
 52 }
 53 
 54 int DFN[N], Low[N], Stack[N], top, Time; //Low[u]是点集{u点及以u点为根的子树} 中(所有反向弧)能指向的(离根最近的祖先v) 的DFN[v]值(即v点时间戳)
 55 int taj;//连通分支标号,从1开始
 56 int Belong[N];//Belong[i] 表示i点属于的连通分支
 57 bool Instack[N];
 58 vector<int> bcc[N]; //标号从1开始
 59 
 60 void tarjan(int u ,int fa){
 61     DFN[u] = Low[u] = ++ Time ;
 62     Stack[top ++ ] = u ;
 63     Instack[u] = 1 ;
 64 
 65     for (int i = head[u] ; ~i ; i = edge[i].nex ){
 66         int v = edge[i].to ;
 67         if(DFN[v] == -1)
 68         {
 69             tarjan(v , u) ;
 70             Low[u] = min(Low[u] ,Low[v]) ;
 71             if(DFN[u] < Low[v])
 72             {
 73                 edge[i].sign = 1;//为割桥
 74             }
 75         }
 76         else if(Instack[v]) Low[u] = min(Low[u] ,DFN[v]) ;
 77     }
 78     if(Low[u] == DFN[u]){
 79         int now;
 80         taj ++ ; bcc[taj].clear();
 81         do{
 82             now = Stack[-- top] ;
 83             Instack[now] = 0 ;
 84             Belong [now] = taj ;
 85             bcc[taj].push_back(now);
 86         }while(now != u) ;
 87     }
 88 }
 89 
 90 void tarjan_init(int all){
 91     memset(DFN, -1, sizeof(DFN));
 92     memset(Instack, 0, sizeof(Instack));
 93     top = Time = taj = 0;
 94     for(int i=1;i<=all;i++)if(DFN[i]==-1 )tarjan(i, i); //注意开始点标!!!
 95 }
 96 vector<int>G[N];
 97 int du[N];
 98 void suodian(){
 99     memset(du, 0, sizeof(du));
100     for(int i = 1; i <= taj; i++)G[i].clear();
101     for(int i = 0; i < edgenum; i++){
102         int u = Belong[edge[i].from], v = Belong[edge[i].to];
103         if(u!=v)
104         {
105             G[u].push_back(v), du[v]++;
106            // printf("%d %d\n",u,v);
107         }
108     }
109 }
110 void init(){memset(head, -1, sizeof(head)); edgenum=0;}
111 int main()
112 {
113     //Read();
114     int t,a,b;
115     scanf("%d",&t);
116     while(t--)
117     {
118         scanf("%d%d",&n,&m);
119         init();
120         for(int i=0;i<m;i++)
121         {
122             scanf("%d%d",&a,&b);
123             add(a,b);
124         }
125         tarjan_init(n);
126         suodian();
127         int x=0,y=0;
128         for(int i=1;i<=taj;i++)
129         {
130             if(du[i]==0) x++; //出度为0点的个数
131             if(G[i].size()==0) y++;
132         }
133         //printf("%d\n",j);
134         if(taj==1) printf("0\n");
135         else
136         printf("%d\n",max(x,y));
137     }
138     return 0;
139 }

 

转载于:https://www.cnblogs.com/nowandforever/p/4731003.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP状态码表格汇总

HTTP状态码 一、介绍 ​ 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。借助状态码&#xff0c;用户可以知道服务器端是正常处理了请求&#xff0c;还是出现了错误。 【注意】 状态码是&#xff1a;服务端向客户端发送的反映响应结果的标识码…

一文看尽微软开发者大会 让AI和云驱动一切

来源 | 网易智能一年一度的微软开发者大会Build 2019在美国华盛顿州雷德蒙德拉开帷幕&#xff0c;微软公司CEO萨提亚纳德拉&#xff08;Satya Nadella&#xff09;介绍和发布了一系列全新技术&#xff0c;并在现场展示了以客户为中心的智能体验全新解决方案。微软此次发布的新功…

爬虫文档学习 xpath bs4 selenium scrapy...

爬虫 一、介绍 1、什么是爬虫 1.1 爬虫(Spider)的概念 爬虫用于爬取数据&#xff0c; 又称之为数据采集程序。 爬取的数据来源于网络&#xff0c;网络中的数据可以是由Web服务器&#xff08;Nginx/Apache&#xff09;、数据库服务器(MySQL、Redis)、索引库&#xff08;Ela…

用人工神经网络控制真实大脑,MIT的科学家做到了

来源&#xff1a;网络大数据三位研究者分别是 MIT 大脑与行为科学系主任 James DiCarlo、MIT 博士后 Pouya Bashivan 和 Kohitij Kar。相关论文发表在 5 月 2 日 Science 的网络版上。论文链接&#xff1a; http s://www.biorxiv.org/content/10.1101/461525v1研究人员表示&…

学习卫星菜单

学会坚持的自己写的底部中间菜单 转自http://www.cnblogs.com/persist-confident/p/4487386.html 看了hyman老师的视频&#xff0c;听起来有点迷糊&#xff0c;所以就想把实现卫星菜单的实现总结一下。长话短说&#xff0c;下面总结一下&#xff1a; 一、自定义ViewGroup1&…

Python 的垃圾回收回收机制(源码)

python内存管理及垃圾回收 1. 引用计数器 1.1 环状双向连表 refchain 在python程序中创建的任何对象都会放在refchain链表中&#xff0c;并且可以通过这个对象访问到上一个和下一个对象。 name 张三 age 18 hobby [美女,吃饭]内部会建立一些数据 -打包 C语言叫做结构体-…

未来五年人工智能将实现的五大突破

来源&#xff1a;资本实验室不论是可以和你对话的智能音箱&#xff0c;还是能够自己作画的虚拟艺术家&#xff1b;不论是能够帮助农民准确判断种植和施肥时间的农场管理系统&#xff0c;又或者是能够在演唱会现场快速识别罪犯的人脸识别程序&#xff0c;人工智能已经开始在各行…

NSNumber, NSValue的使用

NSNumber NSNumber *n [NSNumber numberWithDouble:10.5]; int d [n doubleValue];int a 20; NSString *str [NSString stringWithFormate:"%d", a]; //string转int ["20" intValue];//转化成NSNumber 10 YES A "A"int value 100; (value)N…

python面试常问

一、Python基础部分 1. 数据类型 数字类型(Numbers)&#xff1a; 整数(int), 浮点数(float), 复数(complex) 布尔(Booleans)&#xff1a; True和False 字符串(Str)&#xff1a;Uniconde字符序列, 在引号内包含 列表(list)&#xff1a; 有序的值的序列 元组(Tuples)&#x…

springJDBC一对多关系,以及Java递归,jsp递归的实现

maven编译&#xff0c;springMVCspringspringJDBC框架。 要实现的功能是一个文件夹下&#xff0c;可能显示n个文件夹&#xff0c;每个文件夹下又可能显示n个文件夹。。。。 前台效果&#xff1a; controller中的方法如下&#xff1a; RequestMapping(value"/index",m…

未来全球15大热门研究方向出炉!

转自&#xff1a;科学网&#xff08;sciencenet-cas&#xff09;要点速览伦敦、纽约、新加坡、香港、巴黎、北京、东京、迪拜、上海、柏林、波士顿&#xff0c;这些国际性大都市在科技创新方面的表现如何&#xff1f;它们主要关注哪些研究方向&#xff1f;15大科技创新策源点&a…

Django-rest framework

Django-rest Framework 1. FBV CBV 1.1 开发模式 普通开发方式&#xff08;前后端放在一起写&#xff09;前后端分离 1.2 后端开发 为前端提供URL&#xff08;API/接口的开发&#xff09; 注&#xff1a;永远返回HttpResponse 1.3 Django FBV、CBV # FBV(function base …

常用的网络营销方法有哪些

索引擎营销 电子邮件营销 即时通讯营销 病毒式营销 BBS营销 博客营销 播客营销 RSS营销 SN营销 创意广告营销 知识型营销 事件营销 口碑营销 转载于:https://www.cnblogs.com/happyday56/p/4739488.html

AI产业链分布图曝光:1040个玩家,BAT率先步入应用

来源&#xff1a;网络大数据5月9日&#xff0c;在苏州举办的全球人工智能产品应用博览会上&#xff0c;《新一代人工智能发展年度报告(2018)》重磅发布。发布方是中国经济信息社与新一代人工智能产业技术创新战略联盟。报告相当于对2018年以来全球AI领域融资、国内AI企业分布、…

2015暑假训练(UVALive 5983 - 5992)线段树离线处理+dp

A: http://acm.hust.edu.cn/vjudge/contest/view.action?cid83690#problem/A 题意&#xff1a;N*M的格子&#xff0c;从左上走到右下&#xff0c;要求在每个点的权值必须大于0&#xff0c;问起始的时候必须有多少能量 思路&#xff1a;二分答案 #include<iostream> #i…

什么是混合云?

来源&#xff1a;光联集团混合云是使那些正常的进化措施看起来更酷&#xff0c;是IT前沿术语之一。亚马逊&#xff0c;谷歌和微软等云供应商倡导企业关闭内部数据中心并将所有基础架构迁移到云端&#xff0c;这就是“超融合”数据中心战略。1转移基础设施对于刚刚起步的公司而言…

Shell—grep、sed、awk

Shell学习 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 She…

【科普】AI的分类与演进

来源&#xff1a;物联网智库摘要&#xff1a;AI是人工通过高强度的计算能力&#xff0c;并基于大量的环境数据、行为数据、历史数据等大数据支持&#xff0c;或是一定规则的自学习机制&#xff0c;来分析特定输入的情况下&#xff0c;事物的相关性、影响和可能处理方法&#xf…

AngularJs入门学习

http://www.ituring.com.cn/article/13471 安装并配置好所有依赖环境之后&#xff0c;只需要在cmd进入angular-phonecat目录。接着指令操作npm start&#xff1b;开启服务器。如下图&#xff1a; 打开angular-phonecat的gitbash&#xff1b; 接下来就是用编译器打开angular-pho…

nginx+uWSGI + django部署项目

项目部署 nginxuWSGI django 1. WSGI WSGI是Web服务器网关接口。它是一个规范&#xff0c;描述了Web服务器(返回静态资源的就是web服务器&#xff0c;Nginx)如何与Web应用程序(django、Flask)通信&#xff0c;以及Web应用程序如何链接在一起以处理一个请求&#xff0c;&…