题目大意:给定一个 N 个点,M 条边的有向图,第一问求至少从多少个点出发才能遍历整个有向图,第二问求至少在这个有向图的基础上加多少条边才能使得该无向图强连通。

题解:先进行 Tarjan 缩点,得到一个 DAG。对于这个 DAG 来说,第一问显然是入度为 0 点的个数。第二问中的每条新边均应该是在出度为 0 点和入度为 0 点之间添加,因此答案是入度为 0 的点的个数和出度为 0 点的个数的最大值。另外,若只有一个强联通分量的话,需要特判。

代码如下

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxv=110;
  4. const int maxe=1e4+10;
  5. inline int read(){
  6. int x=0,f=1;char ch;
  7. do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
  8. do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
  9. return f*x;
  10. }
  11. struct node{
  12. int nxt,to;
  13. }e[maxe];
  14. int tot=1,head[maxv];
  15. inline void add_edge(int from,int to){
  16. e[++tot]=node{head[from],to},head[from]=tot;
  17. }
  18. int n;
  19. int dfs_clk,low[maxv],dfn[maxv],stk[maxv],top,in[maxv];
  20. int scc,cor[maxv];
  21. vector<int> G[maxv];
  22. int indeg[maxv],outdeg[maxv],ans1,ans2;
  23. void tarjan(int u){
  24. dfn[u]=low[u]=++dfs_clk;
  25. stk[++top]=u,in[u]=1;
  26. for(int i=head[u];i;i=e[i].nxt){
  27. int v=e[i].to;
  28. if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
  29. else if(in[v])low[u]=min(low[u],dfn[v]);
  30. }
  31. if(low[u]==dfn[u]){
  32. ++scc;int v;
  33. do{
  34. v=stk[top--],in[v]=0;
  35. cor[v]=scc;
  36. }while(u!=v);
  37. }
  38. }
  39. void read_and_parse(){
  40. n=read();
  41. for(int i=1,to;i<=n;i++)while(to=read())add_edge(i,to);
  42. }
  43. void solve(){
  44. for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
  45. for(int u=1;u<=n;u++)
  46. for(int i=head[u];i;i=e[i].nxt){
  47. int v=e[i].to;
  48. if(cor[v]==cor[u])continue;
  49. G[cor[u]].push_back(cor[v]),++indeg[cor[v]],++outdeg[cor[u]];
  50. }
  51. for(int i=1;i<=scc;i++){
  52. if(!indeg[i])++ans1;
  53. if(!outdeg[i])++ans2;
  54. }
  55. ans2=scc==1?0:max(ans2,ans1);
  56. printf("%d\n%d\n",ans1,ans2);
  57. }
  58. int main(){
  59. read_and_parse();
  60. solve();
  61. return 0;
  62. }

【洛谷P2746】Network of Schools的更多相关文章

  1. POJ1236或洛谷2746或洛谷2812 Network of Schools

    POJ原题链接 洛谷2746原题链接 洛谷2812(加强版)原题链接 显然在强连通分量里的所有学校都能通过网络得到软件,所以我们可以用\(tarjan\)求出强连通分量并缩点,统计缩点后每个点的入度和 ...

  2. 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...

  3. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)

    P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...

  4. 【洛谷P2746】[USACO5.3]校园网Network of Schools

    校园网Network of Schools 第一问:Tarjan缩点,搞出每一个连通块,入度为零的连通块是需要必须接受新软件副本的,统计数量即可 第二问:要让整个图构成一个环,显然要将入度为零点和出度 ...

  5. 洛谷P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  6. 洛谷P2746 校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校").注意即使 \(B\) 在 \(A\) 学校的分发列表中, \(A ...

  7. 洛谷 P2746 [USACO5.3]校园网 Network of Schools 题解

    Tarjan 模板题 第一问就是缩点之后看有多少个入度为零的点就好了. 第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出.原因是由题可得 ...

  8. 洛谷 P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  9. 洛谷 P2746 [USACO5.3]校园网Network of Schools schlnet Tarjan强连通分量

    schlnet ★★★   输入文件:schlnet.in   输出文件:schlnet.out   简单对比时间限制:1 s   内存限制:128 MB 描述 一些学校连入一个电脑网络.那些学校已订 ...

随机推荐

  1. 【亲测有效】Centos安装完成docker后启动docker报错docker: unrecognized service的两种解决方案

    今天在学习Docker的时候 使用yum install docker安装完后启动不了,报错如下: [root@Sakura ~]# service docker start docker: unre ...

  2. Python下操作Memcache/Redis/RabbitMQ说明

    一.MemcacheMemcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访 ...

  3. [linux] VirtualBox复制虚拟机

    环境: Oracle VM VirtualBox 5.0.20 CentOS-6.7-x86_64-minimal.iso 1.复制虚拟机 -->右击休眠状态模板虚拟机,选择复制 -->填 ...

  4. Echo团队便利记事本项目终审报告

    一.团队成员简介 http://www.cnblogs.com/echo-buaa/p/3991968.html 二.团队项目的目标,预期的典型用户,预期的功能描述,预期的用户数量在哪里? 项目的目标 ...

  5. linux第一次读书笔记

    第一章 LINUX内核简介 1.1 Unix的历史 1969年的夏天,贝尔实验室的程序员们在一台PDR-7型机上实现了Unix这个全新的操作系统. 1973年,整个Unix系统用C语言进行了重写,给后 ...

  6. oracle加注释

    COMMENT ON table GC_G_DOC84 IS '行政处罚撤销决定书'; COMMENT ON column GC_G_DOC84.CASEID IS '案件记录ID';

  7. Oracle系列(一): Oracle数据恢复

     Oracle数据恢复 在使用Oracle的时候,突然一部小心update或者delete全部数据后怎么办? select * from table as of timestamp to_timest ...

  8. 第三个spring冲刺第10天

    进入最后阶段冲刺最后一天了,基本的需求已经完成了,最后的布局问题也解决了,我们的软件正式推出了.

  9. css3-盒模型新增属性

    box-shadow:跟text-shadow类似,可多层叠加 box-shadow:[inset] x y blur [spread] color inset:投影方式,inset内投影,不加参数外 ...

  10. HDU 1236 排名(Microsoft_zzt)

    http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完 ...