题目大意:给出一个有向图,问你这个图中是否对于任意两点\(u,v\),都至少满足\(u\to v\)(\(u\)可到达\(v\),下同)或\(v\to u\)中的一个。

一看就是套路的图论题,我们先把边连起来。

考虑一个很基本的性质:在一个强连通分量的点两两可达

于是肯定先Tarjan缩一波点。然后我们得到了一个DAG

接下来就是考虑是否有两个点(当然是缩点之后的了)互不可达

这个可以直接跑一边拓扑排序。然后看一下是否在某个时刻有两个点的入度为零即可。

CODE

#include<cstdio>
#include<cctype>
#include<cstring>
using namespace std;
const int N=1005;
struct edge
{int to,next;
}e[N*6],ne[N*6];
int head[N],nhead[N],t,n,m,x,y,cnt,tot,sum,dfn[N],low[N],col[N],stack[N],ru[N],q[N],top;
bool vis[N];
inline char tc(void)
{static char fl[100000],*A=fl,*B=fl;return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{x=0; char ch; while (!isdigit(ch=tc()));while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void add(int x,int y)
{e[++cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;
}
inline void nadd(int x,int y)
{ne[++cnt].to=y; ne[cnt].next=nhead[x]; nhead[x]=cnt;
}
inline void clear(void)
{memset(head,-1,sizeof(head)); memset(e,-1,sizeof(e));memset(nhead,-1,sizeof(nhead)); memset(ne,-1,sizeof(ne));memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis));memset(col,0,sizeof(col)); memset(ru,0,sizeof(ru));cnt=tot=sum=top=0;
}
inline int min(int a,int b)
{return a<b?a:b;
}
inline void Tarjan(int now)
{dfn[now]=low[now]=++tot; vis[now]=1; stack[++top]=now;for (register int i=head[now];i!=-1;i=e[i].next)if (!dfn[e[i].to]) Tarjan(e[i].to),low[now]=min(low[now],low[e[i].to]);else if (vis[e[i].to]) low[now]=min(low[now],dfn[e[i].to]);if (dfn[now]==low[now]){vis[now]=0; col[now]=++sum;while (now!=stack[top]){vis[stack[top]]=0; col[stack[top--]]=sum;} --top;}
}
inline bool top_sort(void)
{register int i,H=0,T=0;for (i=1;i<=sum;++i)if (!ru[i]) q[++T]=i;while (H<T){if (T-H>1) return 0;int now=q[++H];for (i=nhead[now];i!=-1;i=ne[i].next)if (!(--ru[ne[i].to])) q[++T]=ne[i].to;}return 1;
}
int main()
{//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);register int i,j; read(t);while (t--){clear(); read(n); read(m);for (i=1;i<=m;++i)read(x),read(y),add(x,y);for (i=1;i<=n;++i)if (!dfn[i]) Tarjan(i);for (cnt=0,i=1;i<=n;++i)for (j=head[i];j!=-1;j=e[j].next)if (col[i]!=col[e[j].to]) nadd(col[i],col[e[j].to]),++ru[col[e[j].to]];if (top_sort()) puts("I love you my love and our love save us!"); else puts("Light my fire!");}return 0;
}

转载于:https://www.cnblogs.com/cjjsb/p/9415829.html

HDU 6165 FFF at Valentine相关推荐

  1. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:问一个有向图中是否有任意两点可以到达. 读错题就彻底输了,读成判断是否有任意条路,使得经过 ...

  2. 拓扑排序之java实现_有向图和拓扑排序Java实现

    package practice; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Stack; pu ...

  3. hdu6165 缩点,dfs

    hdu6165    FFF at Valentine 题意:给出一个有向图,问任意两个点 a.b,是否可以从a到b,或者从b到a. tags:主要是题意有点绕.. 只要 tarjan 缩点成 DAG ...

  4. Valentine's Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]

    传送门 The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  5. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  6. HDU 2604 Queuing(矩阵高速幂)

    题目地址:HDU 2604 这题仅仅要推出公式来,构造矩阵就非常easy了.问题是推不出公式来..TAT.. 从递推的思路考虑.用f(n)表示n个人满足条件的结果.假设最后一个是m则前n-1人能够随意 ...

  7. hdu 2604 Queuing AC自动机构造递推式-矩阵-结果

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 题意: L个人排队,这一队里男性用m表示,女性用f表示,问长度为L的序列里面不包含形如"fmf& ...

  8. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  9. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

最新文章

  1. 新晋院士:直到硕士毕业前都想做公务员,现在只对科研感兴趣
  2. 菜鸟,大牛,教主的区别
  3. 支持向量机原理(二)
  4. 【采用】无监督学习在反欺诈中的应用
  5. 二十万字C/C++、嵌入式软开面试题全集宝典一
  6. java rest 图_SpringMVC视图及REST风格
  7. PHPWeb开发入门体验学习笔记
  8. C ++基础 | sizeof函数(endl 和 \ n),定义常量(Define Constants),枚举常量(Enumerated Constants)_2
  9. 写了一篇关于餐饮业陷入困境的文章
  10. 基于Monorail的系统功能模块化
  11. 一本关于 Total Commander 的书
  12. 分享27个高质量前端大佬的油管频道(上)
  13. 车企Tier1的日子不好过
  14. 专科计算机专业软件工程,软件工程专业专科学校都有哪些?
  15. 中国十大B2C电商站点开发语言调查
  16. docker + nginx + uwsgi + ubuntu部署django项目
  17. 企业终端无法获取到 IP地址
  18. 数字IC设计随笔之六(DVE中波形数据alias显示)
  19. 阿里内核月报2014年12月
  20. 解二元微分通解和特解的关系,量子力学中的奇异点分析与高数中通解与特解的关系

热门文章

  1. 收集、分析线上日志数据实战——ELK
  2. centos 6.8 下安装redmine(缺陷跟踪系统)
  3. 镶套iframe 鼠标滚动无效解决办法
  4. Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
  5. EXTASPNET C# ASP.NET sql server 调用存储过程超时,解决方法
  6. 分布式存储--理解分布式文件系统、分布式块存储、分布式对象存储、分布式数据库
  7. 网络协议:TCP连接管理
  8. ElasticSearch之高亮显示
  9. (19)ISE14.7软件生成bit失败永久解决方法(FPGA不积跬步101)
  10. (31)System Verilog类class详解