Knots UVA - 1624
首先是初始化节点的状态信息,记录每个节点的左节点编号以及右节点标号,然后删除那些没有遮挡别的节点并且没有被别的节点遮挡的节点,然后开始下面的循环删除节点的过程,因为被遮挡以及遮挡其他节点的总数是2*P,每次首先找出没有被删除的节点,并且记录当前节点的右节点以及右节点的下一个右节点,然后判断这两个节点是否是在同一个平面上,然后判断这两个节点对应的另外一个面上的节点是否满足对应的相邻关系,如果满足就将这四个节点全部删除,如果上面的情况不满足,就判断这两个节点是否满足遮挡关系,如果满足,那么就将这两个节点全部删除。然后继续迭代判断。最后判断是否这2*P个节点全部被删除了,如果全部被删除了,那么输出“YES”否则输出“NO”,具体实现见如下代码:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<deque>
#include<functional>
#include<utility>
using namespace std;int L, P;
typedef struct Node{int left, right, face;
}Node;
const int maxn = 1000000 + 10;
Node node[maxn];
int f[maxn],vis[maxn];void del(int ind){vis[ind] = 1;node[node[ind].left].right = node[ind].right;node[node[ind].right].left = node[ind].left;
}int main(){int T;cin >> T;for (int Case = 1; Case <= T; Case++){cin >> L >> P;for (int i = 0; i < L; i++){node[i].left = i - 1;node[i].right = i + 1;vis[i] = false;}memset(f, 0, sizeof(f));node[0].left = L - 1;node[L - 1].right = 0;for (int i = 0; i < P; i++){int A, B;cin >> A >> B;f[A] = 1;f[B] = -1;node[B].face = A;node[A].face = B;}for (int i = 0; i < L; i++){if (f[i] == 0){del(i);}}int id = 0;int amount = 2 * P;int x, y;while (amount){bool out = true;while (vis[id]) id++;for (int i = node[id].right; out&&i != id;i=node[i].right){x = i, y = node[i].right;if (f[x] == f[y] && (node[node[x].face].right == node[y].face|| node[node[y].face].right==node[x].face)){del(x);del(node[x].face);del(y);del(node[y].face);amount -= 4;out = false;}else if (node[x].face==y){del(x);del(y);amount -= 2;out = false;}}if (out) break;}cout << "Case #" << Case << ": " << (amount ? "NO\n" : "YES\n");}return 0;
}
Knots UVA - 1624相关推荐
- UVa 1624 打结(Knots)
略 代码: #include<bits/stdc++.h> #define LL long long #define ms(s) memset(s, 0, sizeof(s)) #defi ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- [搜索]UVa 129 困难的串
题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...
- uva 401.Palindromes
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Uva 3767 Dynamic len(set(a[L:R])) 树套树
Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...
- UVA 11752 超级幂
UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & ...
- UVa 11174 - Stand in a Line
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 10112 - Myacm Triangles
UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...
- UVa 10180 - Rope Crisis in Ropeland!
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...
最新文章
- NVIDIA深度学习Tensor Core性能解析(上)
- linux cached 进程,关于Linux cached内存简析
- 一个不经意的问题引发的小思考
- 【iHMI43 应用演示】之 modbus 协议(从机)通信演示
- 正则表达式提取括号里面的值
- leetcode 1486. 数组异或操作(位运算)
- 【CodeForces - 761D 】Dasha and Very Difficult Problem (构造,思维)
- 雷军被重新任命为金山软件董事会副主席
- slice深拷贝数组
- maven build后Downloading maven-metadata.xml
- 荣耀与美团合作推出 “共享笔记本”;传腾讯建议推出美国版微信,已被否;Debian 10.6 稳定版发布|极客头条
- HTML5 3D翻书效果(双面效应)
- kill、killall 、pkill 发送信号命令
- 如何进行 JVM 调优
- Java读写文件的常用方法
- POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
- Graphics2D的使用详情
- 大厂面试:一个四年多经验程序员的BAT面经(转载)
- 【asp.net】MVC中cshtml页面Razor语法大全(综合实例)
- ResponseEntity