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

题意:问一个有向图中是否有任意两点可以到达。

读错题就彻底输了,读成判断是否有任意条路,使得经过所有点并且每条边最多走一次。

强联通缩点,然后维护拓扑序,假如拓扑序中有两个以上点入度为0,那么这几个点之间就不能互相到达了。

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3
  4 namespace fastIO {
  5     #define BUF_SIZE 20
  6     bool IOerror = 0;
  7     inline char nc() {
  8         static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;
  9         if (p1 == pend) {
 10             p1 = buf;
 11             pend = buf + fread(buf, 1, BUF_SIZE, stdin);
 12             if (pend == p1) {
 13                 IOerror = 1;
 14                 return -1;
 15             }
 16         }
 17         return *p1++;
 18     }
 19     inline bool blank(char ch) {
 20         return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';
 21     }
 22     inline void read(int &x) {
 23         char ch;
 24         while (blank(ch = nc()));
 25         if (IOerror)
 26             return;
 27         for (x = ch - '0'; (ch = nc()) >= '0' && ch <= '9'; x = x * 10 + ch - '0');
 28     }
 29     #undef BUF_SIZE
 30 };
 31
 32 const int maxn = 1010;
 33 const int maxm = 6060;
 34 typedef struct Edge {
 35     int u, v, next;
 36     Edge() { next = -1; }
 37 }Edge;
 38 int n, m, cnt;
 39 int head[maxn], ecnt;
 40 Edge edge[maxm];
 41 int bcnt, dindex;
 42 int dfn[maxn], low[maxn];
 43 int stk[maxn], top;
 44 int belong[maxn];
 45 int in[maxn];
 46 bool instk[maxn];
 47 bool vis[maxn];
 48 int f[maxn][maxn];
 49
 50 void init() {
 51     memset(edge, 0, sizeof(edge));
 52     memset(head, -1, sizeof(head));
 53     memset(instk, 0, sizeof(instk));
 54     memset(dfn, 0, sizeof(dfn));
 55     memset(low, 0, sizeof(low));
 56     memset(belong, 0, sizeof(belong));
 57     memset(in, 0, sizeof(in));
 58     ecnt = top = bcnt = dindex = 0;
 59 }
 60
 61 void adde(int uu, int vv) {
 62     edge[ecnt].u = uu;
 63     edge[ecnt].v = vv;
 64     edge[ecnt].next = head[uu];
 65     head[uu] = ecnt++;
 66 }
 67
 68 void tarjan(int u) {
 69     int v = u;
 70     dfn[u] = low[u] = ++dindex;
 71     stk[++top] = u;
 72     instk[u] = 1;
 73     for(int i = head[u]; ~i; i=edge[i].next) {
 74         v = edge[i].v;
 75         if(!dfn[v]) {
 76             tarjan(v);
 77             low[u] = min(low[u], low[v]);
 78         }
 79         else if(instk[v]) low[u] = min(low[u], dfn[v]);
 80     }
 81     if(dfn[u] == low[u]) {
 82         bcnt++;
 83         do {
 84             v = stk[top--];
 85             instk[v] = 0;
 86             belong[v] = bcnt;
 87         } while(v != u);
 88     }
 89 }
 90
 91 queue<int> q;
 92
 93 int check() {
 94     while(!q.empty()) {
 95         int u = q.front(); q.pop();
 96         int tot = 0;
 97         for(int v = 1; v <= bcnt; v++) {
 98             if(!f[u][v]) continue;
 99             in[v]--;
100             if(!in[v]) {
101                 tot++;
102                 q.push(v);
103             }
104         }
105         if(tot >= 2) return puts("Light my fire!");
106     }
107     return puts("I love you my love and our love save us!");
108 }
109
110 signed main() {
111     // freopen("in", "r", stdin);
112     using namespace fastIO;
113     int T, u, v;
114     read(T);
115     while(T--) {
116         read(n); read(m);
117         init();
118         memset(f, 0, sizeof(f));
119         for(int i = 0; i < m; i++) {
120             read(u); read(v);
121             adde(u, v);
122         }
123         for(int i = 1; i <= n; i++) {
124             if(!dfn[i]) tarjan(i);
125         }
126         for(int i = 0; i < ecnt; i++) {
127             u = belong[edge[i].u], v = belong[edge[i].v];
128             if(u == v) continue;
129             if(f[u][v]) continue;
130             f[u][v] = 1; in[v]++;
131         }
132         while(!q.empty()) q.pop();
133         int cnt = 0;
134         for(int i = 1; i <= bcnt; i++) {
135             if(in[i] == 0) {
136                 q.push(i);
137                 cnt++;
138             }
139         }
140         (cnt == 1) ? check() : puts("Light my fire!");
141     }
142     return 0;
143 }

转载于:https://www.cnblogs.com/kirai/p/7413185.html

[HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)相关推荐

  1. [图论]强联通分量+缩点 Summer Holiday

    Summer Holiday Description 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系 ...

  2. bzoj2208 [Jsoi2010]连通数 强连通分量缩点+拓扑排序+bitset

    Description 对于100%的数据,N不超过2000. Solution 容易想到要tarjan缩点按拓扑序递推,但是去重的步骤不好弄 C++STL中有bitset,用这个当成二进制按位状压即 ...

  3. P3387-【模板】缩点【tarjan,强联通分量,DAGdp】

    正题 评测记录: https://www.luogu.org/recordnew/lists?uid=52918&pid=P3387 大意 一个有向图.每个点有权值,但每个值只能取一次,每条边 ...

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

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

  5. Tarjan的强联通分量

    求强联通分量有很多种. <C++信息学奥赛一本通>  中讲过一个dfs求强联通分量的算法Kosdaraju,为了骗字数我就待会简单的说说.然而我们这篇文章的主体是Tarjan,所以我肯定说 ...

  6. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

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

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

  8. 强联通分量与双连通分量

    强联通分量 1.概念 在有向图G中,如果两点互相可达,则称这两个点强连通,如果G中任意两点互相可达,则称G是强连通图. 定理: 1.一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次 ...

  9. 关于强联通分量 的求法讨论

    这个讨论主要是关于 HA2006年最受欢迎的牛 的讨论 . 尽管这道题对于很多dalao来说都觉得是模板题,但是仍是值得思考的,因为我第一次写这道题的时候, 缩完点之后建图建错玄学跑dfs n^2做法 ...

  10. POJ 2186 Popular Cows (强联通分量)

    链接 :http://poj.org/problem?id=2186 一个联通分量里的所有的牛满足任何一个被其他牛认为是红人.强联通缩点之后 只需要找到一个且只有一个联通分量且它的出度为0 答案就是这 ...

最新文章

  1. mysql查询以文件形式导出_mysql以文件形式导入导出整个数据库
  2. ejb运行程序_在哪里可以运行EJB?
  3. hbuilder自述文件_一次修复一个自述文件
  4. 造谣“外卖员因差评杀人” 女子被依法刑事拘留
  5. fread python有没有_将C的fread转换为python,没有得到预期的输出
  6. EBMIDE——打印格式管理
  7. 唐山大地震 昨夜万人首映 尚雯婕演唱《23秒,32年》使观众情绪得以第二次温暖爆发...
  8. linux内核syscall_define6,linux中添加系统调用
  9. AndroidUI的基本结构
  10. 如何用优盘安装服务器操作系统,使用优盘安装服务器
  11. AI识别照片是谁,人脸识别face_recognition开源项目安装使用 | 机器学习
  12. 计算机u盘病毒清除方式,U盘如何格式化和清理病毒
  13. Linux-hostname查看及修改
  14. python 3.7.732位安装步骤_Python 3.7.7详细图文安装教程(附安装包) | 我爱分享网
  15. 注册页面reg.html
  16. 一些边边角角的东西。
  17. 【愚公系列】2023年02月 WMS智能仓储系统-012.登录功能的实现
  18. golang tollbooth 中间件 压测工具 vegeta
  19. 不搞笑不给力——年会小品 山寨新闻联播
  20. 产品经理(16)#PC端设计

热门文章

  1. dell笔记本耳机怎么设置_win10笔记本怎么设置合上盖子不休眠
  2. 什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?
  3. react mysql增删改查_react增删改查
  4. 如何网络推广分析新站上线后网站不收录的原因有哪些?
  5. mysql数据库建站教程视频_Mysql数据库零基础到精通视频教程(共6天)
  6. 服务器跑python程序_远程编写+调试服务器上的Python程序
  7. mysql 优化版_MySQL优化(超完整版)(一)
  8. Java函数式折叠,循环,记忆化效率初识
  9. Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue
  10. MultiSet和Set的区别