题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165

题意:给你一个无环,无重边的有向图,问你任意两点,是否存在路径使得其中一点能到达另一点

解析:强联通后拓扑排序,因为对于每一层来说只能有一个入度为零的点,若存在两个,那么就会存在一对点不可达

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<bitset>
#include<functional> using namespace std; #define LL long long
const int INF = 0x3f3f3f3f; const int maxn = 1e5+100;
vector<int>G[maxn];
vector<int>rG[maxn];
vector<int>vs;
vector<int>g[maxn];
queue<int> q;
int vis[maxn],cmp[maxn];
int in[maxn];
void init(int n)
{
for(int i=0; i<=n; i++)
{
G[i].clear();
rG[i].clear();
g[i].clear();
}
while(!q.empty()) q.pop();
}
void addEdge(int u,int v)
{
G[u].push_back(v);
rG[v].push_back(u);
}
void dfs(int u)
{
vis[u] = 1;
for(int i=0; i<(int)G[u].size(); i++)
{
int v = G[u][i];
if(!vis[v])
dfs(v);
}
vs.push_back(u);
}
void rdfs(int u,int k)
{
vis[u] = 1;
cmp[u] = k;
for(int i=0; i<(int)rG[u].size(); i++)
{
int v = rG[u][i];
if(!vis[v])
rdfs(v,k);
}
}
int scc(int n)
{
memset(vis,0,sizeof(vis));
vs.clear();
for(int i=1; i<=n; i++)
{
if(!vis[i])
dfs(i);
}
memset(vis,0,sizeof(vis));
int k = 0;
for(int i=vs.size()-1; i>=0; i--)
{
if(!vis[vs[i]])
rdfs(vs[i],k++);
}
memset(in,0,sizeof(in));
for(int i=1; i<=n; i++)
{
for(int j=0; j<(int)G[i].size(); j++)
{
int v = G[i][j];
if(cmp[i]!=cmp[v])
{
in[cmp[v]]++;
g[cmp[i]].push_back(cmp[v]);
}
}
}
return k;
}
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d %d",&n,&m);
init(n);
for(int i=0; i<m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
addEdge(x,y);
}
int k=scc(n);
int flag=0;
for(int i=0; i<k; i++)
{
if(in[i]==0)
{
q.push(i);
flag++;
}
if(flag==2)
break;
}
if(flag<2)
{
while(!q.empty())
{
int now=q.front();
q.pop();
flag=0;
for(int i=0; i<(int)g[now].size(); i++)
{
int v=g[now][i];
in[v]--;
if(in[v]==0)
{
flag++;
q.push(v);
}
if(flag==2) break;
}
if(flag>=2) break;
}
}
if(flag>=1)
puts("Light my fire!");
else
puts("I love you my love and our love save us!");
}
return 0;
}

HDU 6170 FFF at Valentine(强联通缩点+拓扑排序)的更多相关文章

  1. HDU 6165 FFF at Valentine(Tarjan缩点+拓扑排序)

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. FFF at Valentine(强连通分量缩点+拓扑排序)

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  4. POJ 2762Going from u to v or from v to u?(强联通 + 缩点 + 拓扑排序)

    [题意]: 有N个房间,M条有向边,问能否毫无顾虑的随机选两个点x, y,使从①x到达y,或者,②从y到达x,一定至少有一条成立.注意是或者,不是且. [思路]: 先考虑,x->y或者y-> ...

  5. CodeForces 1213F (强联通分量分解+拓扑排序)

    传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...

  6. HDU 2767-Proving Equivalences(强联通+缩点)

    题目地址:pid=2767">HDU 2767 题意:给一张有向图.求最少加几条边使这个图强连通. 思路:先求这张图的强连通分量.假设为1.则输出0(证明该图不须要加边已经是强连通的了 ...

  7. Intelligence System (hdu 3072 强联通缩点+贪心)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. Proving Equivalences (hdu 2767 强联通缩点)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  9. POJ 2186 Popular Cows(强联通+缩点)

    Description Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= ...

随机推荐

  1. tomcat服务监控分析及自启

    #! /bin/bash # process-monitor.sh serverName="/usr/local/apache-tomcat-7.0.72-8080" #获取进程i ...

  2. kivy之Label属性及文本标记实操练习

    关于kivy内label功能有二部分内容,一个是label小部件属性,另一个是label文本标记属性,实操练习的效果图如下: . 现将label常用的这二类属性整理如下: 现在我们来进行实操练习,在p ...

  3. SSH以及ROS远程登录设置保姆级教程

    本文用来实现在同一局域网内的两台计算机之间的相互通信,实现一台计算机登录到另一台计算机,本文基于SSH来实现. 1.SSH简介 Secure Shell(SSH)是由 IETF(The Interne ...

  4. Docker源码安装附内网镜像安装演示

    Docker源码安装附内网镜像安装演示 系统版本要求 当前系统版本:CentOS Linux release 7.9.2009 (Core) 内核版本:3.10.0-1160.el7.x86_64 注 ...

  5. Spring系列之HikariCP连接池

    上两篇文章,我们讲到了Spring中如何配置单数据源和多数据源,配置数据源的时候,连接池有很多选择,在SpringBoot 1.0中使用的是Tomcat的DataSource,在SpringBoot ...

  6. 题解 Prime

    传送门 考场上魔改了一下线性筛,觉得要筛到 \(\frac{R}{2}\) 就没让它跑 其实正解就是这样,只不过由于接下来类似埃氏筛的过程只要筛到根号就行了 线性筛有的时候其实并不需要筛到 \(\fr ...

  7. ATM取款机优化需求的用例设计

    案例设计需求 有一个ATM取款系统,现对于取款功能进行了如何需求变更:碑只能取面额是100元(如取500,输出5张100元),现在功能修改为,可以取面额是10元.50元和100元的,其余功能不变,用户 ...

  8. SpringBoot2.0整合Quartz定时任务(持久化到数据库,更为简单的方式)

    1. pom文件添加依赖 <dependencies> <dependency> <groupId>org.springframework.boot</gro ...

  9. C++泛型编程之类模板

    泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中, ...

  10. Mybatis简单应用

    Mybatis的核心组件: SqlSeeeionFactoryBuilder (构建器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式: SqlS ...