题意:
      给你一些a<b的关系,然后有三组询问。
1 当前这组之后如果能确定这n个数的大小关系,那么就输出关系
2 当前时候出现bug,就是和前面如果冲突,那么就不行
3 最后的答案是否是不确定的,就是既没确定关系,也没出现bug.

思路: 
      这个题目要清楚一点就是处理顺序,上面的三个情况可能会出现重叠的情况,那么就按照上面的1 2 3的优先级来处理,至于判断当前关系是否成立和唯一我用的是差分约束,没有用拓扑排序,差分约束跑完最短路(或者最长路)没有死环,就证明没有bug,而任意点到起点的距离都不重复,那么就是唯一,否则就是当前不能确定,还有就是讨论组里面有个人给了两组数据,我觉得很有用,我就直接粘贴过来吧,为了大家方便理解题意。

分享两组关键性数据:

Posted by MyTalent at 2013-05-08 23:24:07 on Problem 1094
6 6
A<F
B<D
C<E
F<D
D<E
E<F
output:
Inconsistency found after 6 relations.

5 5
A<B
B<C
C<D
D<E
E<A
output:
Sorted sequence determined after 4 relations: ABCDE

第一个例子讲述的是:矛盾和多选,优先判断是否矛盾
第二个例子讲述的是:在矛盾之前如果有成功的,算是成功

#include<queue>
#include<stdio.h>
#include<string.h>
#include<algorithm>

#define N_node 30
#define N_edge 1000
#define INF 100000000

using namespace std;

typedef struct
{
    int to ,cost ,next;
}STAR;

typedef struct
{
    int id ,v;
}ANS;

int list[N_node] ,tot;
int mks[N_node] ,mkt[N_node];
int s_x[N_node];
char str[1000+5][5];
STAR E[N_edge];
ANS ans[N_edge];

void add(int a ,int b ,int c)
{
    E[++tot].to = b;
    E[tot].cost = c;
    E[tot].next = list[a];
    list[a] = tot;
}

bool camp(ANS a ,ANS b)
{
    return a.v < b.v;
}

bool Spfa(int s ,int n)
{

for(int i = 0 ;i <= n ;i ++)
    s_x[i] = INF;
    memset(mks ,0 ,sizeof(mks));
    memset(mkt ,0 ,sizeof(mkt));
    queue<int>q;
    q.push(s);
    s_x[s] = 0;
    mks[s] = mkt[s] = 1;
    while(!q.empty())
    {
        int xin ,tou;
        tou = q.front();
        q.pop();
        mks[tou] = 0;
        for(int k = list[tou] ;k ;k = E[k].next)
        {
            xin = E[k].to;
            if(s_x[xin] > s_x[tou] + E[k].cost)
            {
                s_x[xin] = s_x[tou] + E[k].cost;
                if(!mks[xin])
                {
                    mks[xin] = 1;
                    if(++mkt[xin] >= n) return 0;
                    q.push(xin);
                }
            }
        }
    }
    return 1;
}

bool judeok(int n ,int id)
{
    for(int i = 1 ;i <= n ;i ++)
    {
        ans[i].id = i;
        ans[i].v = s_x[i];
    }
    sort(ans + 1 ,ans + n + 1 ,camp);
    for(int i = 2 ;i <= n ;i ++)
    if(ans[i].v == ans[i-1].v)
    return 0;
    printf("Sorted sequence determined after %d relations: " ,id);
    for(int i = 1 ;i <= n ;i ++)
    printf("%c" ,ans[i].id + 'A' - 1);
    printf(".\n");
    return 1;
}

int main ()
{
    int n ,m ,i;
    while(~scanf("%d %d" ,&n ,&m) && n + m)
    {
        for(i = 1 ;i <= m ;i ++)
        scanf("%s" ,str[i]);
        memset(list ,0 ,sizeof(list));
        tot = 1;
        for(i = 1 ;i <= n ;i ++)
        add(0 ,i ,0);//虚拟出来一个0点,连接所有点,为了防止整个图不是连通的
        for(i = 1 ;i <= m ;i ++)
        {
            int a = str[i][0] - 'A' + 1;
            int b = str[i][2] - 'A' + 1;
            add(b ,a ,-1);
            int now = Spfa(0 ,n);
            if(now && judeok(n ,i)) break;
            if(!now)
            {
                printf("Inconsistency found after %d relations.\n" ,i);
                break;
            }
        }
        if(i == m + 1)
        {
            printf("Sorted sequence cannot be determined.\n");
            continue;
        }
    }
    return 0;
}

POJ1094查分约束,判断关系是否唯一相关推荐

  1. POJ1364基本的查分约束问题

    题意:       给了由n个数组成的一个数列,然后给你各种区间的和是大于ci还是小于ci啥的,最后问你是否冲突. 思路:       差分约束水题,不过wa了两次,原因处理区间问题的细节马虎了,说下 ...

  2. PAT顶级 1016 Uniqueness of MST (35分)(判断最小生成树是否唯一)

    添加链接描述 Given any weighted undirected graph, there exists at least one minimum spanning tree (MST) if ...

  3. 查分约束例题(洛古)

    昨天看了看差分约束系统的算法...做了4道题... P1250 种树 #include<iostream> #include<algorithm> #include<qu ...

  4. POJ2983 查分约束系统

    题意:        给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路:       一开始想用带权并 ...

  5. Oracle索引梳理系列(七)- Oracle唯一索引、普通索引及约束的关系

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  6. 学习笔记 查分约束系统

    定义:如果一个系统由n个变量和m个约束条件组成,形成m个形如 ai - aj ≤ k 的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference cons ...

  7. 教学思路SQL之预备课程学习 建库、建表、建约束、关系、部分T-sql语句

    --建库 if exists(select * from sys.sysdatabases where name='wf') begin  use master  drop database wf e ...

  8. 关系数据库理论----如何判断关系模式规范化达到第几范式

    文章目录 求关系模式最高达到第几范式的步骤 通俗理解1NF,2NF,3NF. 如何求关系模式的候选码 如何求闭包 函数依赖 求关系模式最高达到第几范式的步骤 根据给定的U和F,首先求它的候选码 根据候 ...

  9. MySQL - 表的增删改查(约束+聚合、联合查询)

    本节目标: 数据库约束 表的关系 新增: 删除 修改 查询 1.数据库约束 1.1约束类型 NOT NULL -指示某列不能存储 NULL值. UNIQUE -保证某列的每行必须有唯一的值. DEFA ...

最新文章

  1. iPhone开发:Objective-c中@property声明时的参数释疑
  2. MongoDB数据节点基础操作
  3. WebBrowser脚本错误的完美解决方案
  4. 如何更改 Mac 上的光标颜色
  5. 2018.11.16 长难句4
  6. 如何使用React,TypeScript和React测试库创建出色的用户体验
  7. 银行各类理财收益渐涨 各类宝钱景尚不明朗
  8. 手把手带你写Node.JS版本小游戏
  9. python+selenium+appium遇到的环境问题(已解决)
  10. flash如何同时访问本地文件系统和网络文件
  11. c语言常量(c语言常量定义规则)
  12. html怎么隐藏项目符号,CSS-如何隐藏侧边栏列表中的项目符号?
  13. 【礼物】的定义不同所造成的诡异反差感
  14. 易语言 设置屏幕刷新率 源码_下任安卓机皇曝光,领先iPhone 12屏幕一年!
  15. 超火爆的人类一败涂地Human Fall Flat Mac中文版(支持m1)
  16. excel如何快速将中文翻译为英文?
  17. VK1668 SSOP24兼用TM1668的LED数码驱动芯片
  18. 戴维·考克斯爵士去世
  19. 6.4_[Java 数组]-详解 break/continue 跳转语句
  20. 流水的新技术,铁打的Linux

热门文章

  1. 利用gulp对项目html,js,css,图片进行压缩
  2. Navicat是如何连接到服务器的呢
  3. MVC自定义视图规则
  4. 多线程并发:每个开发人员都应了解的内容
  5. 索引原理,查询机制(转)
  6. Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入
  7. drf解决跨域问题 使用 django-corse-headers扩展
  8. ResDepot CRC码
  9. 201521123011 《java程序设计》 第9周学习总结
  10. 创建 OVS 外部网络 ext_net - 每天5分钟玩转 OpenStack(144)