博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Light Oj 1003
阅读量:5051 次
发布时间:2019-06-12

本文共 1460 字,大约阅读时间需要 4 分钟。

题意 : 给你m个二元关系, 问是否可以确定各个节点的先后关系;

思路: 拓扑排序, 判断是否有环;

#include
using namespace std;const int maxn = 1e4 + 131;struct Node{ int nxt, to;}edge[maxn];int Head[maxn], tot;void AddEdge(int From, int To){ edge[tot].to = To; edge[tot].nxt = Head[From]; Head[From] = tot++;}map
StoI;string a, b;int Vis[maxn];/// 记录节点的访问次数void TopSort(int n){ queue
qu; int lest = n; for(int i = 1; i <= n; ++i) { if(!Vis[i]) qu.push(i); } while(!qu.empty()) { int u = qu.front(); qu.pop(); --lest; for(int i = Head[u]; i != -1; i = edge[i].nxt) { int v = edge[i].to; --Vis[v]; if(!Vis[v]) qu.push(v); } } if(lest) puts("No"); else puts("Yes");}int main(){ int t; scanf("%d",&t); for(int kase = 1; kase <= t; ++kase) { int m; scanf("%d",&m); StoI.clear(); memset(Head,-1,sizeof(Head)); tot = 0; int n = 0; memset(Vis, 0, sizeof(Vis)); for(int i = 1; i <= m; ++i) { cin >> a >> b; if(StoI.find(a) == StoI.end()) StoI[a] = ++n; if(StoI.find(b) == StoI.end()) StoI[b] = ++n; ++Vis[StoI[b]]; AddEdge(StoI[a], StoI[b]); } printf("Case %d: ",kase); TopSort(n); } return 0;}

 

转载于:https://www.cnblogs.com/aoxuets/p/5506873.html

你可能感兴趣的文章
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
tensorflow实现迁移学习
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
关于Redis处理高并发
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
asp.net core 系列 16 Web主机 IWebHostBuilder
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>