题意:关于Rating的信息。这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B,小于B。根据这些信息是否能够确定出这个高手榜,是的话就输出"OK"。否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT")。注意,如果信息中同时包含冲突且信息不完全,就输出"CONFLICT"。

思路:拓扑排序  A > B 就在图中画一条A-->B的有向边整体画完后找到入度为0的点他一定是榜单的第一,如果入度为0的点有多个说明榜单不完整,然后将和他有联系的点入度-1,再找入度为0的点知道再也找不到为止,这是判断点是否用完,用完了说明榜单完整,没用完说明有环,有冲突。但是题目中有A = B 这种数据,所以要用到并查集,将相等的点合并为一个集合,然后所有的操作都有父亲节点完成

如 A = B, A > C, C > B;因为A = B 所以并查集合并,A为父亲,A > C 建立有向边,C > B 将B节点的父亲A代替B,C的父亲还是C, 这样C > A 冲突了

操作的都是父亲节点。其他同上

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<queue>
using namespace std; struct node
{
int father;
}node[10005];
int num[10005];
int sum = 0;
void Make_set(int n)
{
int i;
for(i = 0; i < n; i++)
{
node[i].father = i;
num[i] = 0;
}
} int Find_set(int x)
{
if(x != node[x].father)
{
node[x].father = Find_set(node[x].father);
}
return node[x].father;
} bool Union(int a,int b)
{
int x = Find_set(a);
int y = Find_set(b); if(x == y)
return 0;
else
{
node[y].father = x;
}
return 1;
} void topsort(vector<int> v[],int n)
{
queue<int> q;
int i;
for(i = 0;i < n; i++)
{
if(num[i] == 0 && Find_set(i) == i)
q.push(i); } int flag = 0;
while(!q.empty())
{
if(q.size() > 1)
{
flag = 1;
}
int i;
int t = q.front();
q.pop();sum--;
for(i = 0; i < v[t].size(); i++)
{
num[v[t][i]]--;
if(!num[v[t][i]])
q.push(v[t][i]);
}
} if(sum > 0)
printf("CONFLICT\n");
else if(flag)
printf("UNCERTAIN\n");
else
printf("OK\n");
} int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
sum = n;
Make_set(n);
vector<int> v[10005];
int i,a[10005],b[10005];
char c[10005];
for(i = 0; i < m; i++)
{
scanf("%d %c %d",&a[i],&c[i],&b[i]);
if(c[i] == '=')
{
if(Union(a[i],b[i]))
sum--;
}
}
for(i = 0; i < m; i++)
{
if(c[i] != '=')
{
int x = Find_set(a[i]);
int y = Find_set(b[i]);
if(c[i] == '>')
{
v[x].push_back(y);
num[y]++;
}
else
{
v[y].push_back(x);
num[x]++;
}
}
}
topsort(v,n);
}
return 0;
}

Rank of Tetris(hdu1811拓扑排序+并查集)的更多相关文章

  1. HDU 1811 Rank of Tetris(拓扑排序+并查集)

    题目链接: 传送门 Rank of Tetris Time Limit: 1000MS     Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...

  2. HDU 1811 Rank of Tetris 【拓扑排序 + 并查集】

    自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...

  3. HDU 1811 Rank of Tetris 拓补排序+并查集

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) [ ...

  4. hdu 1811 Rank of Tetris(拓扑,并查集)

    题意:略 分析:排序先按rating,若相同,则按rp.考虑到每个人的rp均不同,所以rating相同的人必然可以排序.那么只需要考虑rating不同的集合了.  大小关系可以用有向边表示,而大小关系 ...

  5. hdu1811 拓扑排序+并查集缩点

    /*给定两个点之间的三种关系 = < >如果是=就将两点放到同一个集合里进行缩点 离线处理所有关系,先用并查集将等于关系缩成一个点 */ #include<bits/stdc++.h ...

  6. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  7. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  8. hdu1811 Rank of Tetris 拓扑排序+并查集

    这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...

  9. hdu 1811 Rank of Tetris - 拓扑排序 - 并查集

    自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...

随机推荐

  1. JS将下拉框的disable变为able的方法

    在jquery中可以通过jqueryObj.attr("disabled","disabled")将页面中某个元素置为不可编辑或触发状态,但是在jquery的A ...

  2. 安装php 带debug

    gdb安装包   在CentOS6.4下使用gdb进行调试的时候, 使用bt(breaktrace)命令时,会弹出如下的提示: 头一天提示: Missing separate debuginfos, ...

  3. Gentoo安装

    Gentoo Linux安装详解--根据官方WiKi整理 时间:2014-06-26 06:37:54      阅读:549      评论:0      收藏:0      [点我收藏+] 标签: ...

  4. I.MX6 Android 移除 Settings wifi功能

    /********************************************************************* * I.MX6 Android 移除 Settings w ...

  5. spring-webmvc 4.3.4 与 freemarker、easyui 整合

    一.所需lib包 二.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xm ...

  6. 关于 mkimage

    在嵌入式系统中,Linux内核和根文件系统一般都与bootloader一起烧写在flash芯片中,系统启动后,bootloader将Linux内核压缩到RAM中,并把压缩的根文件系统复制到RAM中,然 ...

  7. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  8. empty(trim($str))报错原因

    最近写程序的时候发现一个这样的问题,一个if判断如下: [php] if (!empty(trim($ch_url))) { ... } [/php] 执行程序报出如下错误: [code] Fatal ...

  9. leetcode@ [295]Find Median from Data Stream

    https://leetcode.com/problems/find-median-from-data-stream/ Median is the middle value in an ordered ...

  10. Read Asia Embedded fell

    first and foremost, 很久没写了,心痒了,手贱了,于是乎在这一刻心静时,积攒的思绪开始回放了,惊世Copy-on-write之文随之面世了; 臭毛孩子拉的 屎 特臭,小毛孩子前途黯淡 ...