POJ2762 UV
题意:n个山洞,对于每两个山洞s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No。
————————————————————————————————————————
第一个缩点的题目,道理早就明白,从来没写过。
首先,有些点是可以互通的,在强连通分量里面,所以强连通分量缩点。
方法:
1、tarjan,求出各个点分别属于哪一个分量。
2、读取所有的边,判断边的两点是否属于不同分量,不同则在两个分量间建边。
然后,只能有一个点入读为了0,所有点初读都不大于1,输出“yes”,否则输出"no".
————————————————————————————————————————
- //utovorvtou
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<stack>
- using namespace std;
- const int maxm=;
- const int maxn=;
- int T,n,m;
- struct edge
- {
- int u,v,next;
- }e[maxm],ee[maxm];
- int head[maxn],js,headd[maxn],jss;
- bool ins[maxn];
- int visx,sshu;
- int dfsn[maxn],low[maxn],belong[maxn];
- int rudu[maxn],chudu[maxn];
- stack<int>st;
- void init()
- {
- memset(head,,sizeof(head));
- js=;
- memset(headd,,sizeof(headd));
- jss=;
- memset(ins,,sizeof(ins));
- while(!st.empty())st.pop();
- visx=;
- sshu=;
- memset(dfsn,-,sizeof(dfsn));
- memset(low,-,sizeof(low));
- memset(rudu,,sizeof(rudu));
- memset(chudu,,sizeof(chudu));
- }
- void addage(int u,int v,edge e[],int &js,int head[])
- {
- e[++js].u=u;e[js].v=v;
- e[js].next=head[u];head[u]=js;
- }
- void tarjan(int u)
- {
- dfsn[u]=low[u]=++visx;
- ins[u]=;
- st.push(u);
- for(int j=head[u];j;j=e[j].next)
- {
- int v=e[j].v;
- if(dfsn[v]==-)
- {
- tarjan(v);
- if(low[v]<low[u])low[u]=low[v];
- }
- else if(ins[v] && low[u]>dfsn[v])low[u]=dfsn[v];
- }
- int j;
- if(low[u]==dfsn[u])
- {
- sshu++;
- do
- {
- j=st.top();
- st.pop();
- ins[j]=;
- belong[j]=sshu;
- }while(j!=u);
- }
- }
- stack<int>s;
- bool topo()
- {
- int tp=,maxt=;
- for(int i=;i<=sshu;i++)
- {
- if(rudu[i]==)
- {
- tp++;
- }
- if(chudu[i]>maxt)maxt=chudu[i];
- }
- if(tp>)return ;
- if(maxt>)return ;
- return ;
- }
- int main()
- {
- cin>>T;
- while(T--)
- {
- scanf("%d%d",&n,&m);
- init();
- for(int u,v,i=;i<m;i++)
- {
- scanf("%d%d",& u,&v);
- addage(u,v,e,js,head);
- }
- for(int i=;i<=n;i++)
- {
- if(dfsn[i]==-)tarjan(i);
- }
- for(int i=;i<=js;i++)
- {
- int u=e[i].u,v=e[i].v;
- if(belong[u]!=belong[v])
- {
- addage(belong[u],belong[v],ee,jss,headd);
- rudu[belong[v]]++;chudu[belong[u]]++;
- }
- }
- if(topo()==)printf("Yes\n");else printf("No\n");
- }
- return ;
- }
POJ2762 UV的更多相关文章
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- 《Note --- Unreal 4 --- B project --- Second UV issue》
Second uv 可以通过editor来生成: 这部分内容都是在staticMeshEditor这个文件夹下面的代码里: 关于UI的相应机制,有个文件UICommandList.cpp例如我点击st ...
- UV动画
[猫猫的Unity Shader之旅]之纹理映射 http://blog.csdn.net/dbtxdxy/article/details/46954417 [猫猫的Unity Shader之旅]之U ...
- PV、UPV、UV简介
1.PV: PV的全称是Pageview,中文的意思是:综合浏览量. 浏览量.页面的浏览次数,衡量网站用户访问的网页数量,用户每打开/刷新一次页面就记录一次,多 次打开会累计. 2.UPV: UPV的 ...
- 互联网中一些常用指标(PV、UV、蹦失率、转换率、退出率)
1) PV:PageView 页面点击量,每次刷新就算一次浏览,多次打开同一页面会累加. 通常是衡量网站的主要指标. 2)UV:Unique Visitor一天内访问网站的人数(是以cookie为 ...
- PV IP UV的概念介绍
IP(独立IP):指独立IP数,不同的IP地址的计算机访问网站的总次数,这个是网站流量分析的一个重要指标.00:00-24:00内相同的IP地址只被计算一次 假如说:赶集网的日独立IP300W,则至少 ...
- 什么是UV?
转自http://www.cnblogs.com/jenry/p/4083415.html 1.什么是UV? 对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV ...
- u3d_Shader_effects笔记5 第二章 通过UV,进行纹理移动
1.前面心情 公司最近打包,像我等小弟闲着,看代码容易困,没事偷着学shader,不过还是要多交流才行. 2.本文参考 这次参考比较多:由texture uv延伸问题多,主要是不明白变量定义: htt ...
- PV、UV、IP之间的区别与联系
先看图: 1.什么是PV值 PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多 ...
随机推荐
- Yahoo Pure 中文参考手册
Pure 是来自雅虎的 CSS 框架,使用 Normalize.CSS 无需任何 JavaScript 代码.框架基于响应式设计,提供多种样式的组件,包括表格.表单.按钮.表.导航等.标识使用非常简单 ...
- weave
Docker的原生网络支持非常有限,且没有跨主机的集群网络方案.目前实现Docker网络的开源方案有Weave.Kubernetes.Flannel.Pipework以及SocketPlane等,其中 ...
- 4、java中有专门的的函数对数组进行排序
在java.util包中的Arrays提供了众多的排序算法可以应用.
- Tomcat应用中post方式传参数长度限制
Tomcat应用中post方式传参数长度限制 jsp页面上是没有限制的,但是在tomcat服务器上有限制,Tomcat 默认的post参数的最大大小为2M, 当超过时将会出错,可以配置maxPostS ...
- php二维数组排序方法(转自http://www.3lian.com/edu/2013/12-26/118882.html)
一维数组排序可以使用asort.ksort等一些方法进程排序,相对来说比较简单.二维数组的排序怎么实现呢?使用array_multisort和usort可以实现 例如像下面的数组: 代码如下: ...
- ISO 14229 简介 转载
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...
- 每天一个 Linux 命令(4):mkdir
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录- 2.命令功能 ...
- Fighting Game
感谢上外静中任淳同学提供 uses crt; label h; //h是重新开始游戏 const y1=18; y2=18; //p1,p2的纵坐标 var ...
- Scrum学习总结
在学习的过程中,记录一些重要的东东,一为认真学习,作下归纳总结:二为以后查阅,好记性不如烂笔头!如果大家认为太简单,欢迎喷喷^_^ Scrum:一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scr ...
- 使用jquery获取url以及jquery获取url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下 1.window.location.href; 其实只是用到了javas ...