题目链接: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. jdbc如何注册数据库驱动Driver的?

    1. 先看看原生jdbc执行sql的步骤 // 在程序启动的时候需要注册一次mysql驱动,必须引入 mysql-connnector-java 的包 Class.forName("com. ...

  2. 一键部署lamp脚本

    #!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #-------Apache------ # ...

  3. rabbitMQ通过@RabbitListener和配置文件XML创建exchange及队列绑定关系

    1.@RabbitListener 2.配置文件 <rabbit:fanout-exchange name="fanoutExchange" xmlns="http ...

  4. Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)

    前言 在一些Android项目中往往需要预置第三方输入法或自己的输入法,这篇文章就简单讲解如何预置第三方输入法apk及设置默认输入法 结果展示 在介绍基本的调整方法前,先看看效果图, 如下 调整方法 ...

  5. DVWA-全等级跨站请求伪造

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  6. windows10磁盘分区后,如何恢复分区,回到未分区之前

    windows10磁盘分区后,恢复到分区以前的状态 1.我的电脑右键======>管理 2.找到磁盘管理 3.因为我的H盘原来是和F盘是同一个分区,只是拆分出来了,所有,找到H盘(确保数据都做过 ...

  7. node 报错 throw er; // Unhandled 'error' event 解决办法

    node 报错 Starting child process with 'node web.js' events.js:183 throw er; // Unhandled 'error' event ...

  8. 【权限管理】Spring Security 执行流程

    转自:https://blog.csdn.net/weixin_37689658/article/details/92752890 1.基本配置使用 (1)创建配置类 创建一个配置类SecurityC ...

  9. 防止XSS 攻击集成springboot

    1.配置相关数据 在配置文件中配置 # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice/* # 匹 ...

  10. springboot项目中进行XSS过滤

    简单介绍 XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...