题目链接: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. Adaptive AUTOSAR 学习笔记 14 - 车辆诊断

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf.作者:Zijian/TENG 原文地 ...

  2. repeatedly function in Clojure

    user=> (doc repeatedly) clojure.core/repeatedly ([f] [n f]) Takes a function of no args, presumab ...

  3. Python3实现Two-Pass算法检测区域连通性

    技术背景 连通性检测是图论中常常遇到的一个问题,我们可以用五子棋的思路来理解这个问题五子棋中,横.竖.斜相邻的两个棋子,被认为是相连接的,而一样的道理,在一个二维的图中,只要在横.竖.斜三个方向中的一 ...

  4. Android系统编程入门系列之服务Service中的进程间通信

    在上篇文章以线程间的通信方式Handler类结尾,服务Service还支持的进程间通信,又是具体怎么实现的呢?这就要用到加载服务一文中提到的AIDL语言规范了. AIDL是 Android Inter ...

  5. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

    一.问题由来 下午的时候,电脑用得好好的,突然一下死机,么办法只能够重新启动.再次打开IDEA的时候,之前打开的所有的项目 信息都不在了,我重新打开项目,然后就出现问题,所有的类都报红了,这让我很是意 ...

  6. Liunx搭建Mysql服务器

    1:安装从网上下载文件的wget命令[root@master ~]# yum -y install wget 2:下载mysql的repo源[root@master ~]# wget http://r ...

  7. NOIP 模拟 9 数颜色

    题解 一道裸的数据结构题 正解是排序 \(+\) 二分,但是这怎么能有动态开点线段树好写呢? 于是我就打了暴力,骗了五十分. 对于每种颜色,我们在下标上开一颗线段树,对于交换若颜色相同则跳过,否则直接 ...

  8. 题解 Walker

    传送门 总觉得有个柿子可以推--然而没推出来 考试的时候有个柿子假了导致我没想用两个点可以解出一组参数的事 假掉的柿子告诉我有不少东西能消掉 然而实际上随便选两个点高斯消元解出一组参数,再代入验证看够 ...

  9. SpringBoot获取请求的参数

    说明 SpringBoot 为我们封装了许多,简便的获取请求参数的方法! 1.获取无注解获取请求参数 请求地址:http://192.168.0.115:8080/myproject/test/noA ...

  10. OGNL表达式入门

    package com.scorpion.ognl; import java.util.ArrayList; import java.util.List; import ognl.Ognl; impo ...