并查集加拓扑排序
来源:互联网 发布:dlna软件下载 编辑:程序博客网 时间:2024/05/30 05:15
题目:点击打开链接
代码:
#include<stdio.h>//#include<bits/stdc++.h>#include<vector>#include<queue>#include<string.h>using namespace std;vector<int>q[10010];queue<int>q5;int f[10010];struct qq{ int l,r;} e[20000];int zhaozuxian(int a){ if(f[a]==a) return a; else { f[a]=zhaozuxian(f[a]); return f[a]; }}int merge1(int a,int b ){ int t1,t2; t1=zhaozuxian(a); t2=zhaozuxian(b); if(t1!=t2) { f[t2]=t1; return 1; } else return 0;}int rudu[10010];int main(){ int n,m; char a[100]; while(~scanf("%d%d",&n,&m)) { getchar(); for(int i=0; i<n; i++) { f[i]=i; q[i].clear(); rudu[i]=0; } // memset(f,0,sizeof(0)); int h=0; int sum=n; int t1,t3; char t2; while(m--) { scanf("%d %c %d",&t1,&t2,&t3); if(t2=='>') { e[h].l=t3; e[h].r=t1; ++h; } else if(t2=='<') { e[h].l=t1; e[h].r=t3; ++h; } else { if(merge1(t1,t3)) sum--; } }// printf("%d\n",sum); for(int k=0; k<h; k++) { q[zhaozuxian(e[k].l)].push_back(zhaozuxian(e[k].r)); rudu[zhaozuxian(e[k].r)]++; } for(int i=0; i<n; i++) { if(rudu[i]==0&&zhaozuxian(i)==i) q5.push(i); } int flag=0; while(!q5.empty()) { int y=q5.front(); if(q5.size()!=1) { flag=1; } q5.pop(); sum--; for(int i=0; i<(int )q[y].size(); i++) if(--rudu[q[y][i]]==0) q5.push(q[y][i]); }// printf("%d\n",sum); if(sum>0) printf("CONFLICT"); else if(flag==1) printf("UNCERTAIN"); else printf("OK"); printf("\n"); } return 0;}
这个题目就是一个拓扑排序加一个并查集,但是wrong了好多回,原因是输入,我不了解gets,所以才这么苦逼,真是太弱了,
贴一个小的知识点:<span style="font-family: 微软雅黑, 'MS Sans Serif', sans-serif; widows: auto; background-color: rgb(255, 237, 196);">gets() </span><span style="font-family: 微软雅黑, 'MS Sans Serif', sans-serif; widows: auto; background-color: rgb(255, 237, 196);">和scanf()的区别在于输入的字符串是否中间有空格:对于前者,只有遇到"\n"时才停止输入,而对于后者,出现"\n"或空格都停止输入。</span>
<span style="font-family: 微软雅黑, 'MS Sans Serif', sans-serif; widows: auto; background-color: rgb(255, 237, 196);">另外这个题也巩固了我的并查集,提升了一下拓扑,还好啊。</span>
0 0
- 并查集加拓扑排序
- hdu 1811 并查集 + 拓扑排序
- hdoj-1811-拓扑排序+并查集
- HDU1811 并查集+拓扑排序
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序,查并集
- hdu 1811 拓扑排序+并查集
- hdu1811 并查集+拓扑排序
- hdoj 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu1811(并查集+拓扑排序)
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu5222(拓扑排序+并查集)
- hdu 1811(拓扑排序+并查集)
- hdu1811 并查集+拓扑排序
- hdu 1811 并查集+拓扑排序
- 点击按钮弹出网页
- 七种常用排序算法
- 常用Web Service汇总(天气预报、时刻表等)
- 录像的视频如何在画面中实时加上时间戳
- IOS 数据库FMDB(四)- (增、删、改、查)
- 并查集加拓扑排序
- js 除选中折叠框其他全部折叠(个人菜鸟笔记)
- POJ3283Card Hands
- 一个游戏程序员的学习资料
- 关于代码打包上传报错:没有适配iPhone5的启动图片
- laravel5和execl应用
- 解决mysqlbinlog: unknown variable 'default-character-set=utf8mb4'问题
- 谷歌约束控件(ConstraintLayout)扁平化布局入门
- Block Chain 区块链