思路:一开始以为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. install xdebug on fedora

    Compiling There is a wizard available that provides you with the correct file to download, and which ...

  2. lnmp 虚拟主机配置及重写

    lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim ...

  3. MembershipProvider的Initialize

    背景 前几天为公司的登陆写密码校验,因为是老系统的东西了,数据已经存在了,所以我要知道密码的校验规则是啥,然后业务经理告诉我了是用Membership去做的加密,让我自己去看.之后我又去问了技术经理, ...

  4. js设置cookie过期及清除浏览器对应名称的cookie

    js设置cookie过期也就相当于清除浏览器对应名称的cookie的例子. 代码: function ClearCookie() {  var expires = new Date();  expir ...

  5. 【7】了解Bootstrap栅格系统基础案例(2)

    ps.这一次要说的是“Responsive column resets”,但是不知道为什么中文官网没有给出翻译,但是在看到案例的时候,感觉这就像一个bug,我自己姑且叫这个是一个高度bug吧,方便自己 ...

  6. phpcms前端页面上传文件

    PHPCMS其实有一个叫做附件的模块,上传用的就是这个东西,现在我们来看一下对应的文件:phpcms\modules\attachment \attachments.php就是这个文件,大概在29行上 ...

  7. NodeJS+ExpressJS+SocketIO+MongoDB应用模板

    OS:Win8.1 with update 关键字:NodeJS,ExpressJS,SocketIO,MongoDB. 1.源代码下载:https://github.com/ldlchina/ESM ...

  8. 八,WPF 命令

    WPF命令模型 ICommand接口 WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理,它包含了两个方法和一个事件: public in ...

  9. 基于C#的SolidWorks插件开发(2)--创建插件

    在项目工程中可以看到SwAddin.cs文件.这个文件是插件的核心文件,包括插件的名称,注册表项,菜单,以及菜单的回调函数都在该文件中实现. 1.修改插件的名称和描述 Guid为插件生成后注册到注册表 ...

  10. Java EJX

    EJX http://www.docin.com/p-121548732.html