http://acm.hdu.edu.cn/showproblem.php?pid=1811

中文码题

对于等号的情况,用并查集合并(因为编号不同一定可以分出先后)

然后判断能否构成拓扑排序,以及拓扑排序是不是唯一的

题不难,考验代码能力,能1A证明手感还不错

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
#include <set> using namespace std; int vis[],head[],cnt,fa[],st[]; struct p{
int a,b;
char op[];
}kk[]; struct node{
int s,t,nxt;
}e[]; void add(int s,int t){
e[cnt].s=s;e[cnt].t=t;e[cnt].nxt=head[s];head[s]=cnt++;
} void INIT(){
cnt=;
memset(head,-,sizeof(head));
} int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
} int dfs(int u){
vis[u]=-;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].t;
if(vis[v]<)return ;
else if(!vis[v] && !dfs(v))return ;
}
vis[u]=;
return ;
} int OK(int n){
for(int i=;i<n;i++){
if(!vis[i] && !st[i] && !dfs(i))return ;
}
return ;
} int IN[]; int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
INIT();
for(int i=;i<n;i++)fa[i]=i;
memset(IN,,sizeof(IN));
memset(st,,sizeof(st));
int flag=;
for(int i=;i<m;i++){
scanf("%d%s%d",&kk[i].a,kk[i].op,&kk[i].b);
if(kk[i].op[]=='='){
int pa=find(kk[i].a);
int pb=find(kk[i].b);
if(pa!=pb){
fa[pa]=pb;
st[pa]=;
}
}
else{
int pa=find(kk[i].a);
int pb=find(kk[i].b);
if(pa==pb)flag=;
}
}
if(!flag)puts("CONFLICT");//所给信息矛盾
else{
for(int i=;i<m;i++){
if(kk[i].op[]=='>'){
add(find(kk[i].a),find(kk[i].b));
IN[find(kk[i].b)]++;
}
else if(kk[i].op[]=='<'){
add(find(kk[i].b),find(kk[i].a));
IN[find(kk[i].a)]++;
}
}
memset(vis,,sizeof(vis));
if(!OK(n))puts("CONFLICT");//有环
else{
queue <int> q;
for(int i=;i<n;i++){
if(!st[i] && !IN[i])
q.push(i);
}
int flag=;
while(!q.empty()){
if(q.size()>){
flag=;
break;
}
int u=q.front();
q.pop();
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].t;
IN[v]--;
if(!IN[v])q.push(v);
}
}
if(!flag)puts("UNCERTAIN");//拓扑结构一层多于一个点,有多种情况
else puts("OK");
}
}
}
return ;
}

HDU 1811的更多相关文章

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

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

  2. HDU 1811 拓扑排序 并查集

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

  3. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

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

  4. hdu 1811 Rank of Tetris

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 拓扑排序和并差集 #include <cstdio> #include <queue&g ...

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

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

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

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description   自从Lele开发了Rating系 ...

  7. HDU 1811 并查集+拓扑排序

    Rank of Tetris 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1811 Problem Description 自从Lele开发了Rati ...

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

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

  9. HDU 1811 并查集

    题意: 思路:topo+并查集 #include <cstdio> #include <vector> #include <algorithm> #include ...

随机推荐

  1. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  2. 两段超简单jquery代码解决iframe自适应高度问题(不用判断浏览器高度)

    这里介绍两个超级简单的方法,不用写什么判断浏览器高度.宽度啥的.下面的两种方法自选其一就行了.一个是放在和iframe同页面的,一个是放在test.html页面的.注意别放错了地方.iframe的代码 ...

  3. C++ fstream stringstream

    一.文件输入输出 C/C++ 输入: freopen("in.cpp", "r", stdin); fclose(stdin); 输出: freopen(&qu ...

  4. iOS各种动画效果

    ios各种动画效果 最普通动画: //开始动画 [UIView beginAnimations:nil context:nil];  //设定动画持续时间 [UIView setAnimationDu ...

  5. 导航栏视图设置 tabbleView 是设置总背景图

    //导航栏视图设置 tabbleView 是设置总背景图 //默认的时白色半透明(有点灰的感觉), UIBarStyleBlack,UIBarStyleBlackTranslucent ,UIBarS ...

  6. bzoj 1926: [Sdoi2010]粟粟的书架

    #include<cstdio> #include<iostream> #define N 201 #define M 500008 using namespace std; ...

  7. 关于JavaScript是否会阻塞图片加载

    <?php //1.js.php sleep(5); file_put_contents("tmp.txt", __FILE__.'->'.__LINE__.' -&g ...

  8. JDBC 连接池

    数据库连接池(connection pool) JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接 ...

  9. 2、IValueConverter应用

    1.C#代码如下: public class logotoimgConverter:IValueConverter { //将logo转换为URI public object Convert(obje ...

  10. Program D--贪心-区间覆盖

    Given several segments of line (int the X axis) with coordinates [Li,Ri]. You are to choose the mini ...