P1347 排序(topo)

加深了对topo的理解。

情况1:就是稳定的topo,层数为n的链。

情况2:有环,判环的方法就是存在节点未入队。

情况3:非情况1和2,就是3。

值得注意的是情况1是针对n个节点,情况2是针对当前的前x个节点的判环。

// Problem: P1347 排序
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1347
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Date: 2022-06-22 10:02:38
// --------by Herio--------#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = {402653189,805306457,1610612741,998244353};
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n){for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);
}
template <typename T>     //x=max(x,y)  x=min(x,y)
void cmx(T &x,T y){if(x<y) x=y;
}
template <typename T>
void cmn(T &x,T y){if(x>y) x=y;
}
vector<int>e[N];
int _in[N],in[N];
bitset<N>vis;
int d[26];
int n,m;
void topo(int r){queue<int>q;memcpy(in,_in,sizeof in);int cnt = 0;vector<int>ans;mst(d,0);int _n = 0;for(int i=0;i<26;i++) if(vis[i]) _n++;for(int i=0;i<26;i++)if(vis[i] &&  !in[i]){q.push(i);cnt++;}int mx = 0;while(!q.empty()){int u = q.front();q.pop();ans.pb(u);cmx(mx,d[u]);for(int v:e[u]){if(!--in[v]){q.push(v);d[v] = d[u] + 1;cnt++;}}}if(mx==n-1){printf("Sorted sequence determined after %d relations: ",r);for(int x:ans) printf("%c",x+'A');puts(".");exit(0);}else if(cnt<_n){printf("Inconsistency found after %d relations.",r);exit(0);}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){string s;cin>>s;e[s[0]-'A'].pb(s[2]-'A');vis[s[0]-'A'] = vis[s[2]-'A'] = true;_in[s[2]-'A']++;topo(i);}puts("Sorted sequence cannot be determined.");return 0;
}

P1347 排序(topo)相关推荐

  1. 数据结构C++——拓扑排序

    数据结构C++--拓扑排序 文章目录 数据结构C++--拓扑排序 一.前言 二.拓扑排序的概念及作用 三.拓扑排序的实现 ①拓扑排序的实现原理 ②拓扑排序中FindInDegree()函数的实现 ③拓 ...

  2. 图论复习(各类习题)

    可以结合这篇博客进行复习:http://www.cnblogs.com/z360/p/7363034.html 一.强连通分量.缩点 习题: 洛谷--P2746 [USACO5.3]校园网Networ ...

  3. HDU 6105 Gameia 树上博弈(思路题)(内附官方题解)

    题目  :Gameia:链接 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) T ...

  4. 洛谷题单【数据结构1-4】图的基本应用

    P5318 [深基18.例3]查找文献 思路 bfs和dfs的模板题 实现 #include<bits/stdc++.h> using namespace std; int n,m; ve ...

  5. 机试备考——刷题攻略

      为了准备保研的机试,在学习完常见算法后,开始了刷题!看了一些大佬的心得分享,总结了一下.   题目类型分为:   数组.字符串.高精度计算.排序.递推.递归.搜索与回溯.贪心算法.分治算法.动态规 ...

  6. 数据结构C++——关键路径

    数据结构C++--关键路径 文章目录 数据结构C++--关键路径 一.前言 二.关键路径的概念 三.关键路径的实现 ①关键路径的实现原理 ②关键路径的代码实现 ③测试的全部代码 四.总结 一.前言 理 ...

  7. 图解Topo拓扑排序

    往期文章目录 [干货满满!]图解Dijkstra迪杰斯特拉 [上篇文章!]手撕Floyd弗洛伊德 目录 往期文章目录 前言 一.Topo排序不是排序 二.AOV网和Topo序列 1.AOV网的概念 2 ...

  8. topo排序判环实操

    项目场景: 有一张订单表,和订单关系表,订单关系表中维护订单与订单之间的父子关系(多对多). 现在需要根据目标订单id去查询到目标订单关系的完整链路与链路中订单信息集合,并且判断链路是否有成环现象. ...

  9. 【数据结构—图】拓扑Topo排序

    #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MaxSize 50typedef ...

最新文章

  1. Python3 文件读写(持续更新)
  2. 【知识星球】分组卷积最新进展,全自动学习的分组有哪些经典模型?
  3. 智能计米器jk76怎么安装_Redmi智能电视X系列性能有多好?怎么安装第三方软件?...
  4. 【渝粤题库】广东开放大学 个人与团队管理 形成性考核
  5. 【HDU - 5777】domino(贪心)
  6. P NP NPC(1)(转载)
  7. dijkstra+priority_queue+vector
  8. 大数据导论习题_《大数据导论(通识课版)》.PDF
  9. 金格WebOffice2015-----vue项目
  10. 移动光猫拨号,IPV6访问内网
  11. 表单域修饰符numebr、trim、lazy
  12. 上位机发送与接收下位机数据
  13. 业务中台构建--业务驱动为核心的云原生体系建设思考
  14. 真相为何竟如此难得 -- 《中国健康调查报告》
  15. (五)循环神经网络 -- 3 语言模型数据集
  16. 《软件方法》第三章 自测题
  17. 怎么批量取消Excel文件中的上下标
  18. Fastjson介绍
  19. 编程基本功:别人指出自己的工作疏漏时,要惭愧要反省
  20. nginx 一个站点支持多端口配置

热门文章

  1. python量化策略——改进的美林时钟轮动策略(二)
  2. 阿里云80 端口别阿里云盾占用
  3. 人类无法抗拒的十大心理学效应
  4. pycharm 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案背景描述...
  5. ShowDown.js MD 转HTML 时的问题
  6. 《德鲁克管理思想精要》读书笔记6 - 企业家战略
  7. 【每日AI】什么是维数?
  8. 4位共阴极数码管的动态扫描电路VHDL设计
  9. Android UI 冻结处理方法
  10. 基于华为云服务器Docker nginx安装和配置挂载