银河中的恒星浩如烟海,但是我们只关注那些最亮的恒星。
我们用一个正整数来表示恒星的亮度,数值越大则恒星就越亮,恒星的亮度最暗是 1。
现在对于 N 颗我们关注的恒星,有 M 对亮度之间的相对关系已经判明。
你的任务就是求出这 N 颗恒星的亮度值总和至少有多大。
输入格式
第一行给出两个整数 N 和 M。
之后 M 行,每行三个整数 T, A, B,表示一对恒星(A, B)之间的亮度关系。恒星的编号从 1 开始。
如果 T = 1,说明 A 和 B 亮度相等。

如果 T = 2,说明 A 的亮度小于 B 的亮度。

如果 T = 3,说明 A 的亮度不小于 B 的亮度。

如果 T = 4,说明 A 的亮度大于 B 的亮度。

如果 T = 5,说明 A 的亮度不大于 B 的亮度。
输出格式
输出一个整数表示结果。
若无解,则输出 -1。
数据范围
N≤100000,M≤100000N≤100000,M≤100000
输入样例:
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1

输出样例:
11

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010, M = 600010;
typedef long long LL;
int n, m;
int h[N], hs[N], e[M], w[M], ne[M], idx;
int dfn[N], low[N], timestamp;
int stk[N], top;
bool in_stk[N];
int id[N], scc_cnt, Size[N];
int dist[N];
void add(int h[], int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}
void tarjan(int u){dfn[u] = low[u] = ++timestamp;stk[++ top] = u, in_stk[u] = true;for (int i = h[u]; ~i; i = ne[i]){int j = e[i];if (!dfn[j]){tarjan(j);low[u] = min(low[u], low[j]);} else  if (in_stk[j])    low[u] = min(low[u], dfn[j]);}if  (dfn[u] == low[u]){++ scc_cnt;int y;do{y = stk[top --];in_stk[y] = false;id[y] = scc_cnt;Size[scc_cnt] ++;}while(y != u);}
}
int main(){scanf("%d%d", &n, &m);memset(h, -1, sizeof h);memset(hs, -1, sizeof hs);for (int i = 1; i <= n; i ++)   add(h, 0, i, 1);while(m --){int t, a, b;scanf("%d%d%d", &t, &a, &b);if (t == 1)   add(h, a, b, 0), add(h, b, a, 0);else if (t == 2)   add(h, a, b, 1);else if (t == 3)   add(h, b, a, 0);else if (t == 4)   add(h, b, a, 1);else      add(h, a, b, 0);}tarjan(0);bool success = true;for (int i = 0; i <= n; i ++){for (int j = h[i]; ~j; j = ne[j]){int k = e[j];int a = id[i], b = id[k];if (a == b){if (w[j] > 0){success = false;break;}}else   add(hs, a, b, w[j]);}if (!success)    break;}if (!success)   puts("-1");else{for (int i = scc_cnt; i; i --){for (int j = hs[i]; ~j; j = ne[j]){int k = e[j];dist[k] = max(dist[k], dist[i] + w[j]);}}LL res = 0;for (int i = 1; i <= scc_cnt; i ++)   res += (LL)dist[i] * Size[i];cout << res << endl;}return 0;
}

有向图的强连通分量----------银河相关推荐

  1. 有向图的强连通分量——银河

    银河 银河中的恒星浩如烟海,但是我们只关注那些最亮的恒星. 我们用一个正整数来表示恒星的亮度,数值越大则恒星就越亮,恒星的亮度最暗是 1. 现在对于 N 颗我们关注的恒星,有 M 对亮度之间的相对关系 ...

  2. 有向图的强连通分量(SCC)

    有向图的强连通分量(SCC) 1. 有向图的强连通分量原理 原理 强连通分量是针对有向图来说的.如下的讲解默认都是针对有向图的. 连通分量:对于一个有向图中的一些点来说,如果任意两点都能相互到达,则称 ...

  3. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...

  4. 算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 强连通图:给定一张有向图.若对于图中任意两个结点x,y,既存在从x到y的路径,也存在从y到x的路径,则称该有向图是"强连通 ...

  5. C++Kosaraju找有向图的强连通分量算法(附完整源码)

    C++Kosaraju找有向图的强连通分量算法 C++Kosaraju找有向图的强连通分量算法完整源码(定义,实现,main函数测试) C++Kosaraju找有向图的强连通分量算法完整源码(定义,实 ...

  6. 缩点(有向图的强连通分量)学习笔记

    缩点(有向图的强连通分量)学习笔记 1.什么是强连通分量?: 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路 ...

  7. 有向图的强连通分量,割点与桥

    有向图的强连通分量 1.Tarjan /* Tarjan算法 复杂度O(N+M) */ #include<iostream> #include<stdio.h> #includ ...

  8. 求无向图的连通分量或有向图的强连通分量—tarjan()ccf高速公路

    概念定义: 在图论中,连通图基于连通的概念. 1. 连通(无向图): 若顶点Vi能通过路径到达Vj,那么称为Vi和Vj是连通的 对无向图:若从顶点Vi到顶点Vj有路径相连(当然从j到i也一定有路径), ...

  9. 有向图的强连通分量算法

    有向图的强连通分量算法 强连通分量定义 在有向图中,某个子集中的顶点可以直接或者间接互相可达,那么这个子集就是此有向图的一个强连通分量,值得注意的是,一旦某个节点划分为特定的强连通分量后,此顶点不能在 ...

最新文章

  1. oracle /+append/好用吗,ORACLE-insert /*+append*/提高性能
  2. vue调用接口获取后台数据_Vuex 存储||获取后台接口数据
  3. 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络
  4. 北风设计模式课程---里氏替换原则(Liskov Substitution Principle)
  5. 玩游戏4g计算机的内存不足,玩游戏时出现存储空间不足, 无法完成此操作, 到底是何原因?...
  6. 练习-CSS3 多栏(Multi-column)
  7. Intel® QAT 助力Nginx压缩处理
  8. OAI SDR LTE 基站部署
  9. IDC最新中国BI市场报告,永洪科技等中国厂商领跑
  10. php判断是否submit,submit什么意思 php提交表单时判断 if$_POST[submit]与 ifisset$_POST[submit] 的区别...
  11. 【InSAR 笔记2】哨兵一号精轨数据批量下载【修改0704】
  12. 微信聊天机器人:软件和源代码,适合小白~(含wxpy、pyinstaller、腾讯AI智能问答、django等模块)
  13. 电脑运行应用程序出现0xc000007b的解决方法
  14. springboot 集成 RabbitMQ confirm 确认模式和 return 回退模式以及Consumer Ack模式
  15. 想学好前端 H5 CSS3 的小朋友们康康我~
  16. JAVA基础——集合【源码剖析】
  17. 关于logrotate的使用
  18. autojs发微信通知
  19. 基于Django的在线学习资源分享与推荐系统(mysql)-python.VUE【数据库设计、论文、源码、开题报告】
  20. Deepin Linux下更新nvidia独显驱动

热门文章

  1. 武林外传—阿沅,这是依赖传递呀!
  2. zucc c语言上机答案,ZUCC第三章 习题答案.doc
  3. lamp 配置mysql_LAMP环境搭建与配置
  4. 想知道数字1-13的深层含义吗?
  5. Nuxt学习(vue项目移植)
  6. 熊猫烧香作者李俊的个人简历
  7. 顶级计算机语言学大会COLING 2016,亮点迭出一一呈现
  8. PREP 语法笔记 2
  9. 小米遭虚假评价后索赔 100 万元
  10. redux启示与实践