Sorting It All Out POJ - 1094 拓扑排序
题意:给N个字母,和M个偏序关系 求一个可确定的全序,可确定是指没有其他的可能例如A>B D>B 那么有ADB DAB两种,这就是不可确定的
其中,M个偏序关系可以看做是一个一个按时间给出的,如果还没给完就已经满足条件了,后面的可以不用管
题解:拓扑水题,直接用拓扑排序暴力 其中 如果途中 冲突 那么即使后面添加了也不能改变冲突 如果前面成功了那就不用管后面了直接continue 其中
拓扑判断的时候如果存在多个0度点 那么就不可确定 如果排序完比n个点少,那么确定不了一个全序,分类讨论
#include<cstdio>
#include<iostream>
using namespace std;
int seq[];
int n,m;
int err,ans;
struct Node{
int pos,next;
}edge[];
int neigh[];
int queue[];
int cur,indegree[];
int front=,rear=;
int toposort(){
int indge[];
bool ok=;
for(int i=;i<n;i++){
indge[i]=indegree[i];
if(indge[i]==)queue[rear++]=i;
}
int k=;
while(front!=rear){
if(front+<rear)ok=;
int temp=queue[front++];
seq[k++]=temp;
int e=neigh[temp];
while(e!=-){
--indge[edge[e].pos];
if(indge[edge[e].pos]==)queue[rear++]=edge[e].pos;
e=edge[e].next;
} }
if(k<n)return -;//huan
if(ok)return ;//chongfu
return ;//chenggong
}
int main(){
char s[];
while(cin>>n>>m&&n){
for(int i=;i<n;i++){
indegree[i]=;
neigh[i]=-;
}
cur=;
err=ans=-;
for(int i=;i<m;i++){
cin>>s;
if(err!=-||ans!=-)continue;//已经有结果了直接把后面的直接读掉就行
int temp1=s[]-'A',temp2=s[]-'A';
edge[cur].pos=temp2;
edge[cur].next=neigh[temp1];//链表记录表相邻
neigh[temp1]=cur;
cur++;
indegree[temp2]++;
int res=toposort();
if(res==)ans=i+;
else if(res==-)err=i+;
}
if(ans!=-){
printf("Sorted sequence determined after %d relations: ", ans);
for (int i = ; i < n; ++i) putchar('A' + seq[i]);
printf(".\n"); }
else if(err!=-){
printf("Inconsistency found after %d relations.\n", err);
}
else {
printf("Sorted sequence cannot be determined.\n"); } }
return ;
}
Sorting It All Out POJ - 1094 拓扑排序的更多相关文章
- nyoj 349 (poj 1094) (拓扑排序)
Sorting It All Out 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 An ascending sorted sequence of distinct ...
- POJ 1094 拓扑排序
Description: 规定对于一个只有大写字母的字符串是有大小顺序的.如ABCD.即A<B.B<C.C<D.那么问题来了.现在第一行给你n, m代表序列里只会出现前n的 ...
- poj 3687(拓扑排序)
http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...
- POJ 3249 拓扑排序+DP
貌似是道水题.TLE了几次.把所有的输入输出改成scanf 和 printf ,有吧队列改成了数组模拟.然后就AC 了.2333333.... Description: MR.DOG 在找工作的过程中 ...
- poj 3249 拓扑排序 and 动态规划
思路:我们首先来一遍拓扑排序,将点按先后顺序排列于一维数组中,然后扫描一遍数组,将每个点的出边所连接的点进行更新,即可得到最优解. #include<iostream> #include& ...
- poj 2585 拓扑排序
这题主要在于建图.对9个2*2的小块,第i块如果出现了不等于i的数字,那么一定是在i之后被brought的.可以从i到该数字建一条边. 图建好后,进行一次拓扑排序,判段是否存在环.若存在环,那么就是B ...
- Poj(3687),拓扑排序,
题目链接:http://poj.org/problem?id=3687 题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号 ...
- POJ 1128 拓扑排序 + 深搜
/* (⊙v⊙)嗯 貌似是一个建图 拓扑+深搜的过程.至于为什么要深搜嘛..一个月前敲得题现在全部推了重敲,于是明白了.因为题意要求如果有多个可能的解的话. * 就要输出字典序最小的那个.所以可以对2 ...
- poj 2367 拓扑排序入门
Description The system of Martians' blood relations is confusing enough. Actually, Martians bud when ...
随机推荐
- 移动前端webApp开发点滴积累20140629
#移动前端webApp开发点滴积累20140629 ##关于input行内居中的问题 给input设定一个比较高的高度,在某些版本的移动设备上,文字不能垂直居中,即使设定了相同的行高也不行.(见图) ...
- DSL 系列(1) - 扩展点的论述与实现
前言 DSL 全称为 domain-specific language(领域特定语言),本系列应当会很长,其中包含些许不成熟的想法,欢迎私信指正. 1. DSL 简述 我理解的 DSL 的主要职能是 ...
- SSH(poderosa)を使って、さくらのMySQLサーバーに接続する方法
SSH(poderosa)を使って.さくらのMySQLサーバーに接続する方法の覚書. 現在のさくらサーバーでは.新規ユーザーはTELNETが使えない.なので.データベースをコマンドラインで操作するには ...
- Graph Without Long Directed Paths CodeForces - 1144F (dfs染色)
You are given a connected undirected graph consisting of nn vertices and mm edges. There are no self ...
- Redis集群之Jedis的使用
maven依赖 <!-- Redis客户端 --> <dependency> <groupId>redis.clients</groupId> < ...
- 提高工作效率-window热键
一.虚拟桌面 Ctrl win D 创建另一个桌面 Ctrl win 左右箭头 来回切换桌面 Ctrl win F4 关闭当前虚拟桌面 二.窗口 win M ...
- 移动端和PC端页面常用的弹出层
我们在页面的时候,很多时候用到了弹出层,消息提醒,确认框等等,统一样式的弹出框可以使页面更加优美.在此,我整理一下我们项目的移动端和PC端页面常用的弹出层. 一.移动端 我们需在页面引入弹出框的样式和 ...
- Chrome浏览器的版本查看 以及V8 javascript 引擎版本查看
1. 发现chrome浏览器最新版本里面带的V8 引擎 版本号与chrome的版本号有一个关系, 这里简单总结一下: 在地址栏里面输入: chrome://version 即可显示出来 比如我正在使用 ...
- 【学亮IT手记】利用字节流复制图片
- 【学亮IT手记】angularJS+select2多选下拉框实例
永远保持对大部分知识的好奇心,学习从不枯燥,也没有被逼学习一说,乐此不疲才是该有的心态和境界!!! 引入相关js库: html部分代码: angularJS定义数据源变量: