思路:一开始以为rating相同的点就直接比较rp然后建图,后来想想不对,因为这样发现不了冲突。后来一想对于rating相同的点可以不用排序,因为对于这些点,他们的rp必然不相同,也就是说在这些点的内部必然存在唯一的且合理的排序,因此只需将要将这些点合并成一个点即可,需要用到并查集的知识。

把所有点按上述方法处理后就会得到一些点(暂且称为“有效点”),对于这些有效点再进行拓扑排序即可。

冲突情形:到最后存在环,或者出现a > b,b > c 且 c >a;

不确定情形:同一层中不止一个点入度为0;

确定情形:除以上两种情形;

#include<stdio.h>
#include<string.h>
typedef struct
{
int to;
int next;
}EdgeNode;
int cnt;
char str[6];
EdgeNode Edge[20005];
int father[10005],depth[10005];
int L[10005],M[10005],R[10005];
int head[10005],indegree[10005];
int vis[10005],node[10005],temp[10005];
void init(int n)
{
int i;
cnt = 0;
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
memset(indegree,0,sizeof(indegree));
for(i = 0;i < n;i ++)
{
father[i] = i;
depth[i] = 0;
}
} int find(int x)
{
if(x == father[x])
return x;
return father[x] = find(father[x]);
} void uint(int x,int y)
{
x = find(x);
y = find(y);
if(x == y)
return ;
if(depth[x] < depth[y])
father[x] = y;
else
{
if(depth[x] > depth[y])
father[y] = x;
else
{
father[x] = y;
depth[y]++;
}
}
return ;
} void add_edge(int n,int m)
{
Edge[cnt].to = m;
Edge[cnt].next = head[n];
head[n] = cnt++;
} int main(void)
{
int a,b,n,m,i,j,k;
int sum,flag_U,flag_C;
while(~scanf("%d %d",&n,&m))
{
init(n);
flag_U = flag_C = 0;
for(i = 1;i <= m;i ++)
{
scanf("%d %c %d",&L[i],&M[i],&R[i]);
if(M[i] == '=')
{
uint(L[i],R[i]);
}
}
for(i = 1;i <= m;i ++)
{
if(M[i] == '=')
continue ;
a = find(L[i]);
b = find(R[i]);
if(a == b)
{
flag_C = 1;
break ;
}
else
{
if(M[i] == '>')
{
add_edge(b+1,a+1);
indegree[a+1]++;
}
else
{
add_edge(a+1,b+1);
indegree[b+1]++;
}
}
}
for(i = 1;i <= n;i ++)
{
sum = 0;
for(j = 1;j <= n;j ++)
{
if(indegree[j] == 0 && vis[j] == 0 && father[j-1] == j-1)
temp[sum++] = j;
}
if(sum > 1)
flag_U = 1;
for(j = 0;j < sum;j ++)
{
vis[temp[j]] = 1;
for(k = head[temp[j]];k != -1;k = Edge[k].next)
{
if(!vis[Edge[k].to])
indegree[Edge[k].to]--;
}
}
}
for(i = 1;i <= n;i ++)
{
if(indegree[i] && father[i-1] == i-1)
{
flag_C = 1;
break ;
}
}
if(!(flag_C+flag_U))
printf("OK\n");
if(flag_C)
printf("CONFLICT\n");
if(flag_U && !flag_C)
printf("UNCERTAIN\n");
}
return 0;
}

HDU 1881的更多相关文章

  1. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  2. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  4. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  5. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  6. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  7. HDU 1796How many integers can you find(容斥原理)

    How many integers can you find Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  8. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

  9. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

随机推荐

  1. libpcap 主要函数及过程详解

    http://blog.chinaunix.net/uid-21556133-id-120228.html libpcap(Packet Capture Library),即数据包捕获函数库,是Uni ...

  2. Java添加事件的四种方式

    Java添加事件的几种方式(转载了codebrother的文章,做了稍微的改动) /** * Java事件监听处理——自身类实现ActionListener接口,作为事件监听器 * * @author ...

  3. Unity帮助文档打开速度慢解决方法

    使用批量文本替换工具替换掉Unity安装目录中\Editor\Data\Documentation\en\Manual\下的所有文件中的如下两个部分:   1. <script type=&qu ...

  4. jquery.animate用法

    <!DOCTYPE html><html><head><script src="http://libs.baidu.com/jquery/1.10. ...

  5. javascript进阶——Ajax

    统的Web 页面和应用中,用户每点击页面上的某个部分,浏览器就会向服务器发出一个请求,等待服务器做出响应,然后返回一个完整新网页,但在大多数情况下用户不得不忍受页面闪烁和长时间的等待.随着Web技术的 ...

  6. Bootstrap优秀网站:乐窝网

    Bootstrap优秀网站:乐窝网 调用谷歌在线地图的API和Bootstrap工具包实现了租房和出租的一个平台. 佩服之极,09年跟一个哥们聊天时,他就提议过这方面的应用,终于看到有人实现了,祝贺. ...

  7. uCOS-II任务的挂起和恢复

    函数描述 OSTaskSuspend() 功能描述:无条件挂起一个任务.调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身.函数原型:INT8U OSTaskSuspend ( ...

  8. Windows常用CMD命令

    远程桌面:mstsc 记事本:notepad        写字板:write 计算器:calc IIS重启:iisreset 60秒倒计时关机命令:tsshutdn     15秒关机:rononc ...

  9. sencha touch jsonp

    asp.net server side code <%@ Page Language="C#" %> <script runat="server&quo ...

  10. Spring MVC 注解和XML的区别

      注解与XML配置的区别 注解:是一种分散式的元数据,与源代码紧绑定. xml:是一种集中式的元数据,与源代码无绑定. 因此注解和XML的选择上可以从两个角度来看:分散还是集中,源代码绑定/无绑定. ...