题目大意:

给一个有向图,一个文件可以从某个点出发传递向他能连的边

现在有两个问题

1.至少需要多少个放文件可以让整个图都有文件

2.可以进行一个操作:给一对点(u,v)连一条u->v的有向边,问至少需要多少次操作,才能使任意一个点放的文件都能传递到整个图

题解:

先tarjan缩个点

对于1. 找入度为0的强联通分量的个数

对于2.取出度和入度为0的强联通分量的个数的较大值(如果只有一个,显然是0)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. #include<stack>
  6. #define M 50010
  7. #define N 10010
  8. using namespace std;
  9. int n,m,u,v,head[N],cnt=,ans,in[N],belong[N],dfn[N],low[N],indx,tar,out[N];
  10. bool inst[N];
  11. stack <int> st;
  12. struct edge
  13. {
  14. int u,v;
  15. }e[M];
  16. void add(int u,int v)
  17. {
  18. e[cnt].v=v;
  19. e[cnt].u=head[u];
  20. head[u]=cnt++;
  21. }
  22. void dfs(int u)
  23. {
  24. dfn[u]=low[u]=++indx;
  25. inst[u]=;
  26. st.push(u);
  27. for (int i=head[u];i;i=e[i].u)
  28. {
  29. int v=e[i].v;
  30. if(!dfn[v])
  31. {
  32. dfs(v);
  33. low[u]=min(low[u],low[v]);
  34. }
  35. else
  36. if (inst[v])
  37. low[u]=min(low[u],dfn[v]);
  38. }
  39. if (dfn[u]==low[u])
  40. {
  41. tar++;
  42. while ()
  43. {
  44. int t=st.top();
  45. st.pop(),inst[t]=;
  46. belong[t]=tar;
  47. if (t==u)
  48. break;
  49. }
  50. }
  51. }
  52. int main()
  53. {
  54. scanf("%d",&n);
  55. for (int i=;i<=n;i++)
  56. {
  57. int j;
  58. while (scanf("%d",&j)!=EOF && j!=)
  59. add(i,j);
  60. }
  61. for (int i=;i<=n;i++)
  62. if (dfn[i]==) dfs(i);
  63. for (int i=;i<=n;i++)
  64. for (int j=head[i];j;j=e[j].u)
  65. {
  66. int v=e[j].v;
  67. if (belong[i]!=belong[v])
  68. {
  69. // printf("%d %d\n",i,v);
  70. in[belong[v]]++;
  71. out[belong[i]]++;
  72. }
  73. }
  74. for (int i=;i<=tar;i++)
  75. if (in[i]==) ans++;
  76. printf("%d\n",ans);
  77. int ans2=;
  78. for (int i=;i<=tar;i++)
  79. if (out[i]== && tar>) ans2++;
  80. if (tar==) ans=;
  81. printf("%d\n",max(ans,ans2));
  82. return ;
  83. }

POJ 1236 Networks of School Tarjan 基础的更多相关文章

  1. Poj 1236 Network of Schools (Tarjan)

    题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...

  2. POJ 1236 Network of Schools (Tarjan + 缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12240   Accepted: 48 ...

  3. [poj] 1236 networks of schools

    原题 这是一道强连通分量板子题. 显然subtask1 是要输出入度为0的点的个数 而subtask2,我们考虑一下最优一定是把一个出度为零的点连到入度为零的点上,这样我们要输出的就是max(出度为零 ...

  4. POJ 1236 Network of Schools Tarjan缩点

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22729   Accepted: 89 ...

  5. poj 2186: Popular Cows(tarjan基础题)

    题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...

  6. POJ 3180 The cow Prom Tarjan基础题

    题目用google翻译实在看不懂 其实题目意思如下 给一个有向图,求点个数大于1的强联通分量个数 #include<cstdio> #include<algorithm> #i ...

  7. POJ 1236 Network of Schools(Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16806   Accepted: 66 ...

  8. POJ 1236 Network of Schools(强连通 Tarjan+缩点)

    POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意:  给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...

  9. POJ 1236 Network of Schools - 缩点

    POJ 1236 :http://poj.org/problem?id=1236 参考:https://www.cnblogs.com/TnT2333333/p/6875680.html 题意: 有好 ...

随机推荐

  1. BZOJ4128: Matrix(BSGS 矩阵乘法)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 813  Solved: 442[Submit][Status][Discuss] Descriptio ...

  2. Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)

    在python中一共有两种作用域:全局作用域和函数作用域全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁:所有函数以外的区域都是全局作用域:在全局作用域中定义的变量,都属于全 ...

  3. order-by-offset-fetch

  4. iOS-修改modal出来的控制器的大小

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{    static BOOL sh ...

  5. Android面试收集录13 Android虚拟机及编译过程

    一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  6. TouTiao开源项目 分析笔记14 段子评论

    1.段子页面详情 1.1.先看看预览界面吧 左边的页面已经实现了,现在的目的就是要实现点击左侧的每一个item 然后跳转到右边相应的段子详情页面. 1.2.首先肯定有右侧这个活动==>JokeC ...

  7. 3,Python常用库之三:Matplotlib

    一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度 ...

  8. 非阻塞IO模板

    服务端 from socke import * server = socket(AF_INET, SOCK_STREAM) server.bind(('127.0.0.1',8083)) server ...

  9. JSONP解决跨域完整例子

    1.这个案例是仿照百度搜索,输入关键词,会出现下拉菜单的过程. 效果: 2.具体做法: (1)利用百度的数据库做script标签的src. 复制之后的地址是这样的 https://sp0.baidu. ...

  10. 《Cracking the Coding Interview》——第1章:数组和字符串——题目5

    2014-03-18 01:40 题目:对字符串进行类似游程编码的压缩,如果压缩完了长度更长,则返回不压缩的结果.比如:aabcccccaaa->a2b1c5a3,abc->abc. 解法 ...