博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1811 Rank of Tetris(拓扑排序+并查集)
阅读量:5275 次
发布时间:2019-06-14

本文共 2223 字,大约阅读时间需要 7 分钟。

不熟悉的点:

1.并查集的按秩压缩

2.vector建图

3.bfs拓扑排序

 

1 #include "cstdio" 2 #include "iostream" 3 #include "cstring" 4 #include "vector" 5 #include "queue" 6 using namespace std; 7 const int N = 10005; 8 int n, m, t; 9 int fa[N];10 int X[2 * N], Y[2 * N];11 int son[N];12 char O[2 * N];13 vector
G[N];14 15 void init(int n)16 {17 for (int i = 0; i <= n; ++i)18 fa[i] = -1;19 for (int i = 0; i <= n; ++i)20 G[i].clear();21 memset(son, 0, sizeof(son));22 }23 int find(int x)24 {25 if (fa[x] < 0) return x;26 return fa[x] = find(fa[x]);27 }28 29 bool merg(int a, int b)30 {31 int x = find(a);32 int y = find(b);33 if (x == y) return false;34 else if (x < y){35 fa[x] += fa[y];36 fa[y] = x;37 }38 else {39 fa[y] += fa[x];40 fa[x] = y;41 }42 return true;43 }44 45 int main()46 {47 while (cin >> n >> m) {48 init(n);49 int num = n;50 for (int i = 0; i < m; ++i) {51 cin >> X[i] >> O[i] >> Y[i];52 if (O[i] == '=') {53 if (merg(X[i], Y[i]))54 num--;55 }56 }57 for (int i = 0; i < m; ++i) if (O[i] != '=') {58 int x = find(X[i]);59 int y = find(Y[i]);60 if (O[i] == '>') {61 G[x].push_back(y);62 son[y]++;63 }64 else {65 G[y].push_back(x);66 son[x]++;67 }68 }69 queue
q;70 for (int i = 0; i < n; ++i)71 if (son[i] == 0 && i == find(i))72 q.push(i);73 int sin = 0;74 while (!q.empty()) {75 if (q.size() > 1) sin = 1;76 int t = q.front();77 q.pop();78 --num;79 for (int v = 0; v < G[t].size(); ++v) {80 if (--son[G[t][v]] == 0)81 q.push(G[t][v]);82 }83 }84 if (num > 0) cout << "CONFLICT" << endl;85 else if (sin) cout << "UNCERTAIN" << endl;86 else cout << "OK" << endl;87 }88 return 0;89 }

 

转载于:https://www.cnblogs.com/usedrosee/p/4242897.html

你可能感兴趣的文章
实现绘制图形的ToolBar
查看>>
C# 串口接收数据中serialPort.close()死锁
查看>>
Python3控制结构与函数
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
Html.Partial和Html. RenderPartial用法
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
《弟子规》下的沉思
查看>>
网络流24题 飞行员配对方案问题
查看>>
剑指offer python版 调整数组顺序使奇数位于偶数前面
查看>>
设置dataGridView单元格颜色、字体、ToolTip、字体颜色
查看>>
tkinter学习三
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【洛谷 2430】严酷的训练
查看>>
第四章App4_3,懂得了抛出异常 throws Exception,read为读取键盘输入数,学会了switch循环...
查看>>
从零开始——MySql01
查看>>
基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
查看>>
sqlmap
查看>>