【UER #5】万圣节的南瓜灯
来源:互联网 发布:服务器如何发送数据 编辑:程序博客网 时间:2024/04/19 21:54
题目链接:http://uoj.ac/contest/21/problem/142
题目大意:给你一个n*m的网格,最右边的一排方格和最左边的一排方格相连,有些方格被弄坏了,请问剩下的方格是不是一棵树
我想对出题人说:不看数据范围我们还是朋友……
uoj的题解真的写的非常好,虽然这次题目质量被狂喷,但是我感觉还不错的说……一定是因为我太弱了QAQ
对于50%的数据,可以相邻的格子建一条边,然后并查集合并,暴力判断……
这里要注意:不管合法的边和n*m-k-1相比不管是多还是少,只要不相等都不是一棵树
对于更大的数据怎么办呢?可以看到n,m巨大但是k巨小,所以直接判断如果n*m大于一个值,就视作不是一棵树,于是就……A……了………………
#include <iostream>#include <cstdio>#include <cstring>#define ll long longusing namespace std;bool h[2333333];int fa[2333333];int d[2][2] = {{0,1},{1,0}};int father(int x){ if(fa[x] != x) fa[x] = father(fa[x]); return fa[x];}int main(){ int N,n,m,k,x,y; for(scanf("%d",&N);N ;N --) { scanf("%d%d%d",&n,&m,&k); memset(h,0,sizeof(h)); ll nn = n; ll mm = m; bool fuck = 0; if (nn * mm > 400000ll) fuck = 1; for(int i = 1;i <= k;i ++) { scanf("%d%d",&x,&y); if(!fuck) { h[(x-1)*m + y] = 1; } } if(fuck) { cout << "No" << endl; continue ; } for(int i = 1;i <= n*m;i ++) fa[i] = i; int cnt = n*m-k-1; bool flag = 0; for(int i = 1;i <= n;i ++) { for(int j = 1;j <= m;j ++) { if(!h[(i-1)*m+j]) { for(int k = 0;k <= 1;k ++) { x = i + d[k][0]; y = j + d[k][1]; if(x > n) continue ; if(y == 0) y = m; if(y > m) y = 1; if(!h[(x-1)*m+y]) { int xx = father((x-1)*m+y),yy = father((i-1)*m+j); if(xx != yy) { fa[xx] = yy; cnt --; } else flag = 1; } } } } } if(flag || cnt) cout << "No" << endl; else cout << "Yes" << endl; } return 0;}
1 0
- 【UER #5】万圣节的南瓜灯
- UOJ UER#5 A 万圣节的南瓜灯
- [并查集] UOJ#142. 【UER #5】万圣节的南瓜灯
- 万圣节各种搞怪的南瓜
- [构造 分治] UOJ#143. 【UER #5】万圣节的数列
- 【构造+分治】【UER #5】UOJ143 万圣节的数列
- PS制作万圣节南瓜
- 快乐万圣节南瓜ppt模板
- 程序员技术宅万圣节自制“南瓜俄罗斯方块”
- 南瓜做的脑袋
- 南瓜
- 南瓜.........南瓜
- 万圣节前夜的系统升级
- 万圣节的“荒唐收购”
- 最后的一个万圣节
- 万圣节的派对 nyist733
- 万圣节后的早晨
- UER #2 手机的生产
- 学习Web应用漏洞最好的教程----WebGoat
- [python 补充] optparse
- 软键盘属性
- C#图片处理像素质量等代码问题
- iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
- 【UER #5】万圣节的南瓜灯
- 锁表参数 enque/table_size via ECC6 EHP7
- 条件运算符和错误防范
- AOSP镜像清华版
- UNIX Tutorial Four
- 设置QTabWidget中tab页的大小
- Parallel Programming with CUDA
- R语言与数据分析【第1季】
- iOS 集成环信(四) 群聊