拓扑排序(poj 1094)
前置知识:拓扑排序
详细注释都在代码里
//该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列。
//是典型的拓扑排序,但输出格式上确有三种形式: // 1.该字母序列有序,并依次输出; // 2.该序列不能判断是否有序; // 3.该序列字母次序之间有矛盾,即有环存在。 // 而这三种形式的判断是有顺序的:先判断是否有环(3),
//再判断是否有序(1),最后才能判断是否能得出结果(2)。
//注意:对于(2)必须遍历完整个图,而(1)和(3)一旦得出结果,
//对后面的输入就不用做处理了。 //有一个问题,我不太清楚,就是在确定有序之后,就直接输出答案,
//对右面的输入也不再处理,但是后面的输入可以让其成为环的话又就会
//让其成为环,所以我想这道题就是在确定有序之后,后面的数据,就都不要了。
//应该是这意思把
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn=1e2+;
int G[][];
int in[];
int q[];
void init()
{
memset(G,,sizeof(G)); //图
memset(in,,sizeof(in)); //入度
}
int Toposort(int n)
{
int aim;int cot=;
int tmpin[];
int flag=; //1的时候表示有序
for(int i=;i<=n;i++) tmpin[i]=in[i]; //将入度复制到tmpin里面来
for(int i=;i<=n;i++){
int num=;
for(int j=;j<=n;j++)
if(!tmpin[j]) num++,aim=j; //这里来判断入度数量,aim是入度为0的那个点
//这里如果出现多个入度,就会选择最后面那个先进行操作;
if(!num) return ; //有环;
if(num>) flag=-; //无序
q[cot++]=aim;
tmpin[aim]=-;
for(int j=;j<=n;j++)
if(G[aim][j]) tmpin[j]--;
}
return flag; }
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
if(!n&&!m) break;
init();
char str[];
int flag=;
for(int i=;i<=m;i++){
scanf("%s",str);
if(flag) continue;
int l=str[]-'A'+;
int r=str[]-'A'+;
G[l][r]=;
in[r]++;
int judge=Toposort(n);
//有环
if(!judge) printf("Inconsistency found after %d relations.\n",i),flag=;
if(judge==){ //有序
printf("Sorted sequence determined after %d relations: ",i);
for(int j=;j<n;j++)
printf("%c",q[j]+'A'-);
printf(".\n");
flag=;
}
}
//无序
if(!flag) printf("Sorted sequence cannot be determined.\n");
}
return ;
}
拓扑排序(poj 1094)的更多相关文章
- 拓扑排序 POJ 1094 Sorting It All Out
题意:给定N个字和M行他们之间的关系,要求输出他们的拓扑排序.此题采用边输入边检测的方式,如果发现环,就结束并输出当前行号:如果读取到当前行时,可以确定拓扑序列就输出,不管后面的输入(可能包含环路): ...
- 拓扑排序 POJ 2367
今天网易的笔试,妹的,算法题没能A掉,虽然按照思路写了出来,但是尼玛好歹给个测试用例的格式呀,吐槽一下网易的笔试出的太烂了. 就一道算法题,比较石子重量,个人以为解法应该是拓扑排序. 就去POJ找了道 ...
- 拓扑排序 POJ 1049 Sorting It All Out
题目传送门 /* 拓扑排序裸题:有三种情况: 1. 输入时发现与之前的矛盾,Inconsistency 2. 拓扑排序后,没有n个点(先判断cnt,即使一些点没有边连通,也应该是n,此时错误是有环): ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
- poj 1094 Sorting It All Out (拓扑排序)
http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- POJ 1094 Sorting It All Out (拓扑排序,判断序列是否唯一,图是否有环)
题意:给出n个字符,m对关系,让你输出三种情况: 1.若到第k行时,能判断出唯一的拓扑序列,则输出: Sorted sequence determined after k re ...
- POJ 1094 Sorting It All Out (拓扑排序) - from lanshui_Yang
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- poj 1094 Sorting It All Out_拓扑排序
题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...
随机推荐
- CSS的文本样式
CSS的文本样式 1.颜色 2.文本对齐方式 3.首行缩进 4.行高 5.装饰 1. 文本位置 居中: text-align: center; 靠左: text-align: left; 靠右: te ...
- 洛谷P3381 MCMF【网络流】
题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入格式 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向 ...
- MCPS & MIPS
MIPS:Million Instructions Per Second MCPS:Million Cycles Per Second MIPS = Total Instructions*Sampli ...
- [国家集训队] 拉拉队排练 - Manacher
用 Manacher 跑出回文串长,注意这里不需要偶数长度所以不需要对串做一些奇怪的处理 然后用前缀和搞一下,计算答案时跑快速幂即可 #include <bits/stdc++.h> us ...
- Wannafly Camp 2020 Day 6F 图与三角形 - 图论
把黑边视为无边,那么答案之和每个点的度数有关 #include <bits/stdc++.h> using namespace std; #define int long long int ...
- java mail发送html格式的邮件
// 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("ma ...
- 文本中自动出现的 ​
文本中自动出现的 ​ 所借鉴原页面地址:https://blog.csdn.net/judyc/article/details/53097142 因判断容器内字符长度来做其它处理 ...
- 【Unity|C#】基础篇(10)——泛型(Generic)/ 泛型约束条件(where)
[学习资料] <C#图解教程>(第17章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...
- C语言--“.”与“->”有什么区别?
这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过. 下面说说我对它们的理解. 一般情况下用“.”,只需要声明一个结构体.格式是,结构体类型名+结构体名.然后用结构 ...
- 题解【洛谷P5958】[POI2017]Sabotaż
题面 考虑树形 \(\text{DP}\). 设 \(dp_i\) 为使 \(i\) 变成叛徒的最大值,同时 \(dp_i\) 也是使 \(i\) 不变成叛徒的最小值. 然后考虑如何转移状态. 如果 ...