题意: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的更多相关文章

  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. 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...

  2. linux常用命令 (mac ),积少成多

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. sqlserver 跨服务器访问数据

    需求:两个一模一样的表,分别分布在两个服务器的数据库上,现在要在一个表中,查看这两个表的内容,并让Id排序 1:在本地数据库查询分析器中,运行以下两段语句: --创建链接服务器 exec sp_add ...

  4. android数据存储之Sqlite(二)

    SQLite学习笔记 前言:上一章我们介绍了sqlite的一些基本知识以及在dos命令下对sqlite进行的增删改查的操作,这一章我们将在android项目中实际来操作sqlite. 1. SQLit ...

  5. UVA 753 UNIX 插头(EK网络流+Floyd传递闭包)

    UNIX 插头 紫书P374 [题目链接]UNIX 插头 [题目类型]EK网络流+Floyd传递闭包 &题解: 看了书之后有那么一点懂了,但当看了刘汝佳代码后就完全明白了,感觉他代码写的好牛逼 ...

  6. [Tex学习]WinEdit 常用软件快捷键

    WinEdit 常用软件快捷键 编辑: Alt+C:在剪贴板原有复制文本后增加新的被选择的文本. Ctrl+Shift+Alt+Right/Left:对选中文本增加或者删除Comment标记. Ctr ...

  7. JavaScript 判断一个对象的数据类型。

    1.isString var isString1 = function (obj){ return Object.prototype.toString.call(obj)==="[objec ...

  8. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  9. sysbench压力测试工具简介和使用(一)

    sysbench压力测试工具安装和参数介绍 一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据 ...

  10. 第三周psp

    12号 类别c 内容c 开始时间s 结束e 中断I 净时间T 结对项目 查资料 8:40 11:22 25m 137m 结对项目 修改代码 12:10 12:40 0m 30m 结对项目 修改代码 1 ...