Going from u to v or from v to u?
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 14789   Accepted: 3915

Description

In order to make their sons brave, Jiajia and Wind take them to a big cave. The cave has n rooms, and one-way corridors connecting some rooms. Each time, Wind choose two rooms x and y, and ask one of their little sons go from one to the other. The son can either
go from x to y, or from y to x. Wind promised that her tasks are all possible, but she actually doesn't know how to decide if a task is possible. To make her life easier, Jiajia decided to choose a cave in which every pair of rooms is a possible task. Given
a cave, can you tell Jiajia whether Wind can randomly choose two rooms without worrying about anything?

Input

The first line contains a single integer T, the number of test cases. And followed T cases. 



The first line for each case contains two integers n, m(0 < n < 1001,m < 6000), the number of rooms and corridors in the cave. The next m lines each contains two integers u and v, indicating that there is a corridor connecting room u and room v directly. 

Output

The output should contain T lines. Write 'Yes' if the cave has the property stated above, or 'No' otherwise.

Sample Input

1
3 3
1 2
2 3
3 1

Sample Output

Yes

Source

[Submit]   [Go Back]   [Status]  
[Discuss]

题意:对于随意两个节点u,v。假设能从u到v或者v到u,那么输出Yes,否则输出No。

思路:先强连通缩点,此时一定不含环,看能不能找到一条最长路包括全部的缩点即可(实际上是找推断单链),用拓扑排序就ok,只是假设仅仅有一个强连通分量那么一定是Yes啦,否则topo排序推断 ,代码例如以下:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn =1e4+10;
const ll mod=20140413;
vector<int>G1[maxn],G2[maxn],G[maxn];
int sccno[maxn],vis[maxn],scc_cnt;//sccno强连通编号,scc_cnt表示强连通分量的个数
int ind[maxn];//ind表示入度
void init_G(int n)//初始化缩点图
{
memset(ind,0,sizeof ind);
for(int i=1;i<=n;i++)G[sccno[i]].clear();
for(int i=1;i<=n;i++) {
for(int j=0;j<G1[i].size();++j){
int &v =G1[i][j];
if(sccno[i]!=sccno[v]) {
G[sccno[i]].push_back(sccno[v]);
ind[sccno[v]]++;
}
}
}
}
bool toposort(int n)//topo排序
{
init_G(n);
int u,cnt=0;
queue<int>q;
for(int i=1;i<=n;i++){
if(!ind[sccno[i]]){
if(!q.empty())return false;
q.push(sccno[i]);
cnt++;
}
}
while(!q.empty()){
u=q.front();
q.pop();
ind[u]=-1;
for(int i=0;i<G[u].size();i++) {
int &v=G[u][i];
ind[v]--;
if(ind[v]==0){
if(!q.empty())return false;
q.push(v);
cnt++;
}
}
}
return cnt==scc_cnt;
}
vector<int>S;
void init(int n)
{
memset(vis,0,sizeof vis);
memset(sccno,0,sizeof sccno);
S.clear();
scc_cnt=0;
for(int i=1;i<=n;i++) {
G1[i].clear();
G2[i].clear();
G[i].clear();
}
}
void AddEdge(int u,int v)
{
G1[u].push_back(v);
G2[v].push_back(u);
}
void dfs1(int u)
{
if(vis[u])return ;
vis[u]=1;
for(int i=0;i<G1[u].size();i++)dfs1(G1[u][i]);
S.push_back(u);
}
void dfs2(int u)
{
if(sccno[u]) return ;
sccno[u]=scc_cnt;
for(int i=0;i<G2[u].size();++i)dfs2(G2[u][i]);
}
bool is_Semiconnect(int n)///计算强连通分量,初步推断
{
for(int i=1;i<=n;i++)dfs1(i);
for(int i=S.size();i>=1;i--){
if(!sccno[S[i-1]]){
scc_cnt++;
dfs2(S[i-1]);
}
}
return scc_cnt<=1;
}
int main()
{
int T,n,m;
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&m);
int u,v;
init(n);
while(m--) {
scanf("%d%d",&u,&v);
AddEdge(u,v);
}
if(is_Semiconnect(n))puts("Yes");
else{
if(toposort(n))puts("Yes");
else puts("No");
}
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

POJ 2762推断单个联通(支撑点甚至通缩+拓扑排序)的更多相关文章

  1. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  2. poj 2762 Going from u to v or from v to u?(强连通分量+缩点重构图+拓扑排序)

    http://poj.org/problem?id=2762 Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit:  ...

  3. POJ 2762 Going from u to v or from v to u?(强连通分量+拓扑排序)

    职务地址:id=2762">POJ 2762 先缩小点.进而推断网络拓扑结构是否每个号码1(排序我是想不出来这点的. .. ).由于假如有一层为2的话,那么从此之后这两个岔路的点就不可 ...

  4. poj 2762(强连通+判断链)

    题目链接:http://poj.org/problem?id=2762 思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最 ...

  5. POJ 2762 Going from u to v or from v to u? (强连通分量缩点+拓扑排序)

    题目链接:http://poj.org/problem?id=2762 题意是 有t组样例,n个点m条有向边,取任意两个点u和v,问u能不能到v 或者v能不能到u,要是可以就输出Yes,否则输出No. ...

  6. poj 2762(强连通分量+拓扑排序)

    题目链接:http://poj.org/problem?id=2762 题意:给出一个有向图,判断任意的两个顶点(u,v)能否从u到达v,或v到达u,即单连通,输出Yes或No. 分析:对于同一个强连 ...

  7. [强连通分量] POJ 2762 Going from u to v or from v to u?

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17089 ...

  8. poj 3177-3352边双联通

    买一送一啊  3177和3352的区别在于3177数据有重边!但是我先做3177的  那么就直接ctrl+c+v搞3352了~. 题意:给一个无向图,要令每个点之间至少有两条不重合的路,需要至少加多少 ...

  9. POJ 2762 Going from u to v or from v to u?- Tarjan

    Description 判断一个有向图是否对于任意两点 $x$,  $y$ 都有一条路径使$x - >y$或 $y - >x$ Solution 对于一个强联通分量内的点 都是可以互相到达 ...

随机推荐

  1. ThinkPHP - 图片水印

    图片添加水印 可以通过使用Image类的水印方法给图片添加水印支持,例如:water 给图片添加水印 用法   water($source, $water, $savename=null, $alph ...

  2. UIBezierPath详解

    使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线 ...

  3. C# 继承细节

    假定没有为类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的构造函数,在后台会进行许多操作,编译器可以很好地解决层次结构中的所有问题,每个类中的每个字段都会初始化为默认值.但在添加了一个我们 ...

  4. Cin、Cout 加快效率方法

    std::ios::sync_with_stdio(false); 在main 函数中加上这么一句话. 可以打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无 ...

  5. 15个最受欢迎的Python开源框架

    以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框 ...

  6. 同步内核缓冲区 sync、fsync和fdatasync函数

    同步内核缓冲区 1.缓冲区简单介绍 人生三大错觉之中的一个:在调用函数write()时,我们觉得该函数一旦返回,数据便已经写到了文件里.可是这样的概念仅仅是宏观上的.实际上.操作系统实现某些文件I/O ...

  7. Amazon的AWS账单看起来不是很方便

    发了一个PDF格式的收据,只写了收取的费用,EC2下面的明细没有. DetailAmazon Simple Notification Service $0.00Charges $0.00Estimat ...

  8. eclipse上 安装php插件

    首先在安装之前需要有eclipse   以及SDK环境已经搭建好 eclipse开发工具下载路径: http://dl.oschina.net/soft/eclipse java sdk下载路径: h ...

  9. 解决win7 中source insight没有courier new字节的问题

    解决win7 中source insight没有courier new字节的问题  http://blog.csdn.net/season_hangzhou/article/details/18665 ...

  10. JAVA中MESSAGEBOX,静态类直接引用

    原文:JAVA中MESSAGEBOX,静态类直接引用 package cisdi.mes.wrm.mcode.serviceImpl; import javax.persistence.Entity; ...