luogu P1347 排序
题目描述
一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A<B,B<C,C<D。在这道题中,我们将给你一系列形如A<B的关系,并要求你判断是否能够根据这些关系确定这个数列的顺序。
输入输出格式
输入格式:
第一行有两个整数n,m,n表示需要排序的元素数量,2<=n<=26,第1到n个元素将用大写的A,B,C,D....表示。m表示将给出的形如A<B的关系的数量。
接下来有m行,每行有3个字符,分别为一个大写字母,一个<符号,一个大写字母,表示两个元素之间的关系。
输出格式:
若根据前x个关系即可确定这n个元素的顺序yyy..y(如ABC),输出
Sorted sequence determined after xxx relations: yyy...y.
若根据前x个关系即发现存在矛盾(如A<B,B<C,C<A),输出
Inconsistency found after 2 relations.
若根据这m个关系无法确定这n个元素的顺序,输出
Sorted sequence cannot be determined.
(提示:确定n个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况)
输入输出样例
1:
4 6
A<B
A<C
B<C
C<D
B<D
A<B 2:
3 2
A<B
B<A 3:
26 1
A<Z
1:
Sorted sequence determined after 4 relations: ABCD.
2:
Inconsistency found after 2 relations.
3:
Sorted sequence cannot be determined.
topo排序
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
const int N = ;
queue<int>que;
int n,m;
bool vis[N];
struct node{
int v,next;
}edge[N*N/];
int many=;
int rd[N],rdd[N];int head[N];int num;
void Add_edge(int x,int y)
{
edge[++num].v=y;edge[num].next=head[x];head[x]=num;
}
int cnt;
int can[N];
int topsort()
{
cnt=;int num=;
for(int i=;i<=;i++)
{
rdd[i]=rd[i];
if(rdd[i]==&&vis[i])num++,que.push(i),can[++cnt]=i;
}
if(!num)return ;
bool a=;
while(!que.empty())
{
int u=que.front();
que.pop();int aa=;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].v;
rdd[v]--;
if(rdd[v]==)
{
can[++cnt]=v;
aa++;
if(aa>=)a=;
que.push(v);
}
}
}
if(cnt!=many)return ;
if(num>||a)return ;
return ;
}
int main()
{
scanf("%d%d",&n,&m);
char a[];
for(int i=;i<=m;i++)
{
scanf("%s",a);
int tmp=a[]-'A'+;
int ttmp=a[]-'A'+;
rd[ttmp]++;
if(!vis[tmp])many++;if(!vis[ttmp])many++;
vis[tmp]=; vis[ttmp]=;
Add_edge(tmp,ttmp);
if(topsort()==)
{
printf("Inconsistency found after %d relations.",i);return ;
}
if(!topsort()&&cnt==n)
{
printf("Sorted sequence determined after %d relations:",i);
for(int j=;j<=cnt;j++)
{
putchar(can[i]+'A'-);
}
//if(can)
printf(".");
return ;
}
}
puts("Sorted sequence cannot be determined.");
return ;
}
luogu P1347 排序的更多相关文章
- P1347 排序
P1347 排序 题目描述 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A<B,B<C,C<D.在这道题中,我们将给你一系 ...
- 洛谷——P1347 排序
洛谷—— P1347 排序 题目描述 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A<B,B<C,C<D.在这道题中,我们 ...
- P1347 排序 (拓扑排序,tarjan)
题目 P1347 排序 解析 打开一看拓扑排序,要判环. 三种情况 有环(存在矛盾) 没环但在拓扑排序时存在有两个及以上的点入度为0(关系无法确定) 除了上两种情况(关系可确定) 本来懒了一下,直接在 ...
- 洛谷 P1347 排序
题目描述 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A<B,B<C,C<D.在这道题中,我们将给你一系列形如A<B ...
- 洛谷P1347 排序
这个题看到很多人写Topo排序,其实这道题第一眼看更像是一个差分约束的裸题QWQ... 令dis[x]表示x的相对大小(1是最小,n是最大),显然,对于一个关系A<B,我们有dis[A]< ...
- Luogu[YNOI2019]排序(DP,线段树)
要最优?就要一步到位,不能做"马后炮",走"回头路",因此将序列映射到一个假定最优序列,发现移动原序列等价于删除原序列元素,以便生成最大不下降子序列.可线段树维 ...
- POJ1094 Sorting It All Out LUOGU 排序
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40012 Accepted ...
- 23-25 October in 614
Practice sort 给定一系列形如 \(A<B\) 的不等关系,判断前 \(k\) 个不等关系是否即可确定 \(n\) 个元素之间的大小顺序:如果不可确定,判断前 \(k\) 个不等关系 ...
- Luogu P3165 [CQOI2014]排序机械臂
先讲一下和这题一起四倍经验的题: Luogu P4402 [Cerc2007]robotic sort 机械排序 SP2059 CERC07S - Robotic Sort UVA1402 Robot ...
随机推荐
- [转]unity之LOD
LOD技术有点类似于Mipmap技术,不同的是,LOD是对模型建立了一个模型金字塔,根据摄像机距离对象的远近,选择使用不同精度的模型. 它的好处是可以在适当的时候大量减少需要绘制的顶点数目. 它的缺点 ...
- 孤荷凌寒自学python第四十一天python的线程同步之Event对象
孤荷凌寒自学python第四十一天python的线程同步之Event对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 鉴于Lock锁与RLock锁均宣告没有完全完成同步文件操作的问题,于 ...
- ironic的自动化脚本
# -*- coding:utf-8 -*- import json import subprocess import os import time import random trunk_start ...
- 聊聊、SpringBoot 上传文件大小
#2.0#spring.servlet.multipart.max-file-size=10Mb#spring.servlet.multipart.max-request-size=10Mb #1.3 ...
- php 根据文件内容来判断文件类型
/*文件扩展名说明 *7173 gif *255216 jpg *13780 png *6677 bmp *239187 txt,aspx,asp,sql *208207 xls.doc.ppt *6 ...
- 哈希UVALive 6326 Contest Hall Preparation
Encrypting passwords is one of the most important problems nowadays, and y ...
- 深入Spring Boot:ClassLoader的继承关系和影响
前言 对spring boot本身启动原理的分析, Spring boot里的ClassLoader继承关系 可以运行下面提供的demo,分别在不同的场景下运行,可以知道不同场景下的Spring bo ...
- 51NOD 1554 欧姆诺姆和项链 巧妙利用KMP
请戳这里! #include<cstdio> #define N 1000100 char s[N]; int n,k,nxt[N],ans[N]; int main() { scanf( ...
- Educational Codeforces Round 42 (Rated for Div. 2) C
C. Make a Square time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- windows 下 mySQL 镜像安装文件下载
前言:有时找到的 MySQL 安装文件是 zip 格式的,需要自己配置,自我感觉麻烦,因此记录下下载镜像安装文件过程. 1. 在浏览器里打开mysql的官网http://www.mysql.c ...