Light Oj 1003
来源:互联网 发布:mysql从excel导入数据 编辑:程序博客网 时间:2024/06/13 07:43
题意 : 给你m个二元关系, 问是否可以确定各个节点的先后关系;
思路: 拓扑排序, 判断是否有环;
#include<bits/stdc++.h>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<string, int> StoI;string a, b;int Vis[maxn];/// 记录节点的访问次数void TopSort(int n){ queue<int> 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;}
0 0
- Light Oj 1003
- light oj 1003 - Drunk
- light oj
- light oj
- Light OJ
- Light OJ
- Light OJ 1000
- Light OJ 1001
- Light OJ 1008
- Light OJ 1022
- Light OJ 1015
- Light OJ 1042
- light oj 1128
- Light OJ 1055 BFS
- Light OJ Beginners Problems
- Light OJ Basic Geometry
- Light OJ Basic Math
- light oj 1124
- 关于安卓面试题的部分整理。
- CF 545C
- HDU 5446
- HDU 5033
- Range out of order in character class 正则表格式
- Light Oj 1003
- 信号
- LightOJ1004
- Android新手入门2016(6)--客户端编程思想的初步思考和Android学习路线
- PHP常用函数
- linux 系统中tomcat服务加入开机启动项
- IOS中block和代理
- 手机访问pc网站自动跳转手机端网站html5代码
- 容器基础知识