题干:

商业信息共享

有 N 个公司,从每个公司都能单向地向另外一个公司分享最新商业信息,因为他们之间有着某种合作,你需要解决两个问题:

现在有一个最新的商业信息,至少需要告诉多少个公司,使得所有的公司最终都能得到该信息。
在原有基础上,至少需要再让多少对公司建立这种合作,使任意一个公司获得某个最新商业信息后,经过若干次分享,所有的公司最终都能得到该信息。
输入格式
第一行输入一个整数 N (1≤N≤100)。

接下来 N行,每行若干个整数,表示第 ii 个公司可以向哪些公司分享信息,以 0 结束。

输出格式
输出共两行,每行一个整数,分别表示问题 1 和问题 2 的答案。

样例输入
6
0
6 0
2 0
2 0
3 1 0
0
样例输出
2
2

题目大意:

两个要求,

1.用最少的公司,将所有的信息传递给其他的公司。

2.最少加多少条边,使图变成强联通图。

解题报告:

又是“传递关系”的问题,还是用tarjan缩点做。

对于1小问,其实就是运用性质①,找入度为0的超级点(你自己联想线性序列嘛!其实就是求这里有几坨线性序列)

对于第2小问也是以“超级点”来做的:

需要思考一下,首先你要知道超级点其实就是一个强联通分量(涵盖的点互相可达),那么对于每个超级点,如果既有边指向它,它又可以指出去,如果每个点都这样“开放 既可以get in又可以get out”,那其实就满足题意说的“任意一个点发消息可达所有点”。否则你想想,如果入度为0了,那么这个超级点只能get out,别人访问不了你啊!同理,出度为0,你访问不了别人啊!这两种情况都会不符合题意的。所以我们就需要找到有没有超级点是出/入度为0的,如果你入度为0,那么我需要给你随便连一条边进来好让别人能够get in,如果你出度为0,那么我需要给你随便连一条边出去好让你可以get out。

因为我连一条线可以解决同时解决一个出度为0和一个入度为0的问题,如果只剩出度为0的问题了,就任意给它连出去就好了,因此,max(出度=0的点数,入度=0的点数)即为所求。

AC代码:(没地方交,不知道正确与否)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
int n,m;y
int head[MAX];
int DFN[MAX],LOW[MAX],col[MAX],cnt[MAX],stk[MAX],out[MAX];
bool vis[MAX];
struct Edge {int fr,to,ne;
} e[MAX],ee[MAX];
int tot,tot2,timing,scc,index;
void add(int u,int v) {e[++tot].fr = u;e[tot].to = v;e[tot].ne = head[u];head[u] = tot;
}
void Tarjan(int x) {LOW[x] = DFN[x] = ++timing;vis[x] = 1;stk[++index] = x;for(int i = head[x]; i!=-1; i=e[i].ne) {int v = e[i].to;if(!DFN[v]) {Tarjan(v);LOW[x] = min(LOW[x],LOW[v]);}else if(vis[v]) LOW[x] = min(LOW[x],DFN[v]);}if(DFN[x] == LOW[x]) {scc++;while(1) {int tmp = stk[index];index--;vis[tmp]=0;col[tmp] = scc;cnt[scc]++;if(x == tmp) break;}}
}
int main()
{cin>>n;memset(head,-1,sizeof head);for(int a,b,i = 1 ; i<=n; i++) {while(scanf("%d",&b) && b) {add(i,b);}}for(int i = 1; i<=n; i++) {if(!DFN[i]) Tarjan(i);}for(int i = 1; i<=m; i++) {if(col[e[i].fr] != col[e[i].to]) {out[col[e[i].fr]]++;in[col[e[i].to]]++;}}int cntin=0,cntout=0;for(int i = 1; i<=scc; i++) {if(out[i] == 0) cntout++;if(in[i] == 0) cntin++;}printf("%d\n",cntin);printf("%d\n",max(cntin,cntout));return 0 ;
}

【计蒜客 - 程序设计竞赛】商业信息共享(Tarjan缩点)相关推荐

  1. 计蒜客—程序设计竞赛入门

    dfs深度搜索-蒜头学算术 题意 蒜头的数学实在是太差了,于是老师把他关到小黑屋让他闭门修炼.老师跟他一张纸,上面一排写着1, 2, 3-N这N个数,中间用空白分隔.老师让他在空白处填上加号或者减号. ...

  2. 计蒜客 ACM竞赛高校联盟训练赛 第8场 煎牛排

    水一水. https://nanti.jisuanke.com/t/24205 煎牛排 题目描述 又是一个难得的周六,是时候远离食堂和外卖出去大吃一顿了.圈内知名吃货AA正想着中午去吃汉堡炸鸡烤肉火锅 ...

  3. [计蒜客][递归]阿克曼函数

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 递归 题目描述 思路 AC代码 #include<iostream> using namespace std;int check ...

  4. [计蒜客][二分]切割钢管

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 二分 题目描述 思路 我们要算最高数量,则要计算某一个高度,总共能被N个钢管切出K个来 计算一个钢管能切出多少只需要a[i]/NUM 只要计 ...

  5. [计蒜客(蓝桥杯省赛)]蒜头君的购物袋2

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 DP 题目描述 思路 01背包模板 题目代码 #include<iostream> #include<climits> ...

  6. [计蒜客][贪心]节约用电

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 贪心 题目描述 思路 事实上就是一维的线上从左到右标记所有M距离的点,相当于用距离为依据划分成N个等分,中间的数量就是答案的数量样例一: 3 ...

  7. [计蒜客][搜索枚举]文具店

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 深度优先搜索 题目描述 思路 意思就是将字符串分割成k串,累加答案尽可能的小 dfs枚举 AC代码 #include<iostream ...

  8. [计蒜客][字符串]最长的名字

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 字符串 题目描述 思路 更新最长 把字符串都放数组里,看谁长度和最大值一致就拿出来 AC代码 #include<iostream> ...

  9. [计蒜客][dfs]中国象棋

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 深度优先搜索 题目描述 样例读入 .#....#S# ..#.#.#.. ..##.#..# ......##. ...T..... ... ...

最新文章

  1. Java 洛谷 P2089 烤鸡
  2. java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)
  3. java检测tomcat宕机_Tomcat意外宕机分析
  4. 如何提升你的代码能力?
  5. 苹果自动驾驶测试车近距离实拍,头顶新添传感器和硬件
  6. 机器视觉牛人及其相关领域分类科普
  7. html盒子中盒子排列,解析CSS的box model盒模型及其内的子元素布局控制
  8. Hadoop之纠删码
  9. 淘宝爬取商品信息以及数据分析
  10. php初级程序员的自我评价,程序员的自我评价【程序员的简历自我评价】
  11. 人脸识别活体检测技术理论
  12. stm32 修改工作频率
  13. 阅读笔记4:基于运动想象的脑机接口系统模式识别算法研究
  14. 数据清洗之 数据整理
  15. 软件版本A.B.C这些数字分别代表什么意思
  16. Datawhale打卡活动 Kaggle Spaceship Titanic Day3
  17. Mybatis-Plus教程
  18. 某哪旅行cookie值Alina参数生成分析
  19. easyui 监听filebox文件框选择改变事件
  20. 如何提高面试的成功率--校招

热门文章

  1. oracle中如何创建dblink
  2. Android-Animations的使用大全之二:Frame Animation和其他
  3. public protect private继承
  4. mysql 添加唯一索引_浅谈Mysql索引
  5. ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析
  6. CSS3 线性渐变背景的过渡效果
  7. python 连接oracle_常用的Python库,给大家分享一下!
  8. linux远程虚拟桌面,2020-07-23 Linux 远程连接虚拟桌面
  9. rdd分片 spark_Spark分区
  10. Linux批量删除文件