题意:n个山洞,对于每两个山洞s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No。

————————————————————————————————————————

第一个缩点的题目,道理早就明白,从来没写过。

首先,有些点是可以互通的,在强连通分量里面,所以强连通分量缩点。

方法:

1、tarjan,求出各个点分别属于哪一个分量。

2、读取所有的边,判断边的两点是否属于不同分量,不同则在两个分量间建边。

然后,只能有一个点入读为了0,所有点初读都不大于1,输出“yes”,否则输出"no".

————————————————————————————————————————

  1. //utovorvtou
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #include<stack>
  7.  
  8. using namespace std;
  9. const int maxm=;
  10. const int maxn=;
  11. int T,n,m;
  12. struct edge
  13. {
  14. int u,v,next;
  15. }e[maxm],ee[maxm];
  16. int head[maxn],js,headd[maxn],jss;
  17. bool ins[maxn];
  18. int visx,sshu;
  19. int dfsn[maxn],low[maxn],belong[maxn];
  20. int rudu[maxn],chudu[maxn];
  21. stack<int>st;
  22.  
  23. void init()
  24. {
  25. memset(head,,sizeof(head));
  26. js=;
  27. memset(headd,,sizeof(headd));
  28. jss=;
  29. memset(ins,,sizeof(ins));
  30. while(!st.empty())st.pop();
  31. visx=;
  32. sshu=;
  33. memset(dfsn,-,sizeof(dfsn));
  34. memset(low,-,sizeof(low));
  35. memset(rudu,,sizeof(rudu));
  36. memset(chudu,,sizeof(chudu));
  37. }
  38. void addage(int u,int v,edge e[],int &js,int head[])
  39. {
  40. e[++js].u=u;e[js].v=v;
  41. e[js].next=head[u];head[u]=js;
  42. }
  43. void tarjan(int u)
  44. {
  45. dfsn[u]=low[u]=++visx;
  46. ins[u]=;
  47. st.push(u);
  48. for(int j=head[u];j;j=e[j].next)
  49. {
  50. int v=e[j].v;
  51. if(dfsn[v]==-)
  52. {
  53. tarjan(v);
  54. if(low[v]<low[u])low[u]=low[v];
  55. }
  56. else if(ins[v] && low[u]>dfsn[v])low[u]=dfsn[v];
  57. }
  58. int j;
  59. if(low[u]==dfsn[u])
  60. {
  61. sshu++;
  62. do
  63. {
  64. j=st.top();
  65. st.pop();
  66. ins[j]=;
  67. belong[j]=sshu;
  68. }while(j!=u);
  69. }
  70. }
  71. stack<int>s;
  72. bool topo()
  73. {
  74. int tp=,maxt=;
  75. for(int i=;i<=sshu;i++)
  76. {
  77. if(rudu[i]==)
  78. {
  79. tp++;
  80.  
  81. }
  82. if(chudu[i]>maxt)maxt=chudu[i];
  83.  
  84. }
  85. if(tp>)return ;
  86. if(maxt>)return ;
  87. return ;
  88. }
  89. int main()
  90. {
  91. cin>>T;
  92. while(T--)
  93. {
  94. scanf("%d%d",&n,&m);
  95. init();
  96. for(int u,v,i=;i<m;i++)
  97. {
  98. scanf("%d%d",& u,&v);
  99. addage(u,v,e,js,head);
  100. }
  101. for(int i=;i<=n;i++)
  102. {
  103. if(dfsn[i]==-)tarjan(i);
  104. }
  105. for(int i=;i<=js;i++)
  106. {
  107. int u=e[i].u,v=e[i].v;
  108. if(belong[u]!=belong[v])
  109. {
  110. addage(belong[u],belong[v],ee,jss,headd);
  111. rudu[belong[v]]++;chudu[belong[u]]++;
  112. }
  113. }
  114. if(topo()==)printf("Yes\n");else printf("No\n");
  115. }
  116. return ;
  117. }

POJ2762 UV的更多相关文章

  1. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

  2. 《Note --- Unreal 4 --- B project --- Second UV issue》

    Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...

  3. UV动画

    [猫猫的Unity Shader之旅]之纹理映射 http://blog.csdn.net/dbtxdxy/article/details/46954417 [猫猫的Unity Shader之旅]之U ...

  4. PV、UPV、UV简介

    1.PV: PV的全称是Pageview,中文的意思是:综合浏览量. 浏览量.页面的浏览次数,衡量网站用户访问的网页数量,用户每打开/刷新一次页面就记录一次,多 次打开会累计. 2.UPV: UPV的 ...

  5. 互联网中一些常用指标(PV、UV、蹦失率、转换率、退出率)

    1) PV:PageView  页面点击量,每次刷新就算一次浏览,多次打开同一页面会累加. 通常是衡量网站的主要指标. 2)UV:Unique  Visitor一天内访问网站的人数(是以cookie为 ...

  6. PV IP UV的概念介绍

    IP(独立IP):指独立IP数,不同的IP地址的计算机访问网站的总次数,这个是网站流量分析的一个重要指标.00:00-24:00内相同的IP地址只被计算一次 假如说:赶集网的日独立IP300W,则至少 ...

  7. 什么是UV?

    转自http://www.cnblogs.com/jenry/p/4083415.html 1.什么是UV?   对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV ...

  8. u3d_Shader_effects笔记5 第二章 通过UV,进行纹理移动

    1.前面心情 公司最近打包,像我等小弟闲着,看代码容易困,没事偷着学shader,不过还是要多交流才行. 2.本文参考 这次参考比较多:由texture uv延伸问题多,主要是不明白变量定义: htt ...

  9. PV、UV、IP之间的区别与联系

    先看图: 1.什么是PV值 PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多 ...

随机推荐

  1. Yahoo Pure 中文参考手册

    Pure 是来自雅虎的 CSS 框架,使用 Normalize.CSS 无需任何 JavaScript 代码.框架基于响应式设计,提供多种样式的组件,包括表格.表单.按钮.表.导航等.标识使用非常简单 ...

  2. weave

    Docker的原生网络支持非常有限,且没有跨主机的集群网络方案.目前实现Docker网络的开源方案有Weave.Kubernetes.Flannel.Pipework以及SocketPlane等,其中 ...

  3. 4、java中有专门的的函数对数组进行排序

    在java.util包中的Arrays提供了众多的排序算法可以应用.

  4. Tomcat应用中post方式传参数长度限制

    Tomcat应用中post方式传参数长度限制 jsp页面上是没有限制的,但是在tomcat服务器上有限制,Tomcat 默认的post参数的最大大小为2M, 当超过时将会出错,可以配置maxPostS ...

  5. php二维数组排序方法(转自http://www.3lian.com/edu/2013/12-26/118882.html)

    一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组:    代码如下: ...

  6. ISO 14229 简介 转载

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...

  7. 每天一个 Linux 命令(4):mkdir

    linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录- 2.命令功能 ...

  8. Fighting Game

    感谢上外静中任淳同学提供   uses crt; label   h;         //h是重新开始游戏 const   y1=18;   y2=18;       //p1,p2的纵坐标 var ...

  9. Scrum学习总结

    在学习的过程中,记录一些重要的东东,一为认真学习,作下归纳总结:二为以后查阅,好记性不如烂笔头!如果大家认为太简单,欢迎喷喷^_^ Scrum:一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scr ...

  10. 使用jquery获取url以及jquery获取url参数的方法

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下 1.window.location.href; 其实只是用到了javas ...