HDU 1811
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的更多相关文章
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 1811 Rank of Tetris
http://acm.hdu.edu.cn/showproblem.php?pid=1811 拓扑排序和并差集 #include <cstdio> #include <queue&g ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
- HDU 1811 并查集+拓扑排序
Rank of Tetris 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1811 Problem Description 自从Lele开发了Rati ...
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
题目链接: 传送门 Rank of Tetris Time Limit: 1000MS Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...
- HDU 1811 并查集
题意: 思路:topo+并查集 #include <cstdio> #include <vector> #include <algorithm> #include ...
随机推荐
- 记一次web项目总结
功能需求,登录,用户管理,新闻管理. 用户管理: // 分页查询所有用户信息 public List<User> userInfo(int index, int pageSize) thr ...
- 必须关注的25位知名JavaScript开发者
必须关注的25位知名JavaScript开发者 发表于2012-08-07 17:30| 16215次阅读| 来源Crossrider Blog| 46 条评论| 作者Crossrider Blog ...
- java面试---summay
1:合适的建立索引,数据量比较大的时候,如果频繁的进行修改插入则不建议建立索引! 2:什么时候适合建索引,在什么字段上面建立索引? (被当做查询条件的) 3:什么叫做编译错误,什么叫做运行时异常 能被 ...
- cms3.0——收获(1)
或许是由于各个公司的情况不同,使得每次写后台管理系统就沿用之前的nodejs中的thinkjs来写后台管理系统,也是因为这样后期维护起来更加方便吧?不过最早之前的项目,却有一个使用的是nodejs 中 ...
- thinkjs——空对象判断
使用thinkjs来做后台的项目开发时,总免不了进行一些数据的唯一性校验,比如说:有这么一个页面,需要对钢厂的名称做一个校验,于是自己在后台做条件搜索时,一不小心用到了两种方法: 一个是find(), ...
- Android selector选择器的使用
通常按钮在点击前和后有两种状态,比如点击前为蓝色,点击后为灰色,且不再响应点击事件. 如果不使用selector选择器,点击后,就需要在程序中进行以下的类似操作 button1.setBackgrou ...
- (巨坑)改了tpl文件之后,前端效果没反应
通常前端修改很小的部分代码,并不会立即显示出效果.比如,原来是 ,修改后是 虽然只是加多了一个函数,但是作用很大,这种情况下,可能是由于浏览器缓存的原因,修改后的代码没有被重新加载.这个时候,只需要在 ...
- redhat enterprixe 5.0 NFS服务配置与管理
一.了解NFS Samba 是主要用于实现Linux和Windows操作系统之间文件共享的协议,而NFS则是实现UNIX和Linux操作系统之间文件共享的协议. NFS可以把网络上远程的文件挂载到本机 ...
- PHP5生成条形码器
前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...
- sql 如何过滤重复记录
distinct : select distinct ID from table1