首先是初始化节点的状态信息,记录每个节点的左节点编号以及右节点标号,然后删除那些没有遮挡别的节点并且没有被别的节点遮挡的节点,然后开始下面的循环删除节点的过程,因为被遮挡以及遮挡其他节点的总数是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相关推荐

  1. UVa 1624 打结(Knots)

    略 代码: #include<bits/stdc++.h> #define LL long long #define ms(s) memset(s, 0, sizeof(s)) #defi ...

  2. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  3. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  4. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. 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 ...

  6. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  7. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  8. UVa 10112 - Myacm Triangles

    UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...

  9. UVa 10180 - Rope Crisis in Ropeland!

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...

最新文章

  1. NVIDIA深度学习Tensor Core性能解析(上)
  2. linux cached 进程,关于Linux cached内存简析
  3. 一个不经意的问题引发的小思考
  4. 【iHMI43 应用演示】之 modbus 协议(从机)通信演示
  5. 正则表达式提取括号里面的值
  6. leetcode 1486. 数组异或操作(位运算)
  7. 【CodeForces - 761D 】Dasha and Very Difficult Problem (构造,思维)
  8. 雷军被重新任命为金山软件董事会副主席
  9. slice深拷贝数组
  10. maven build后Downloading maven-metadata.xml
  11. 荣耀与美团合作推出 “共享笔记本”;传腾讯建议推出美国版微信,已被否;Debian 10.6 稳定版发布|极客头条
  12. HTML5 3D翻书效果(双面效应)
  13. kill、killall 、pkill 发送信号命令
  14. 如何进行 JVM 调优
  15. Java读写文件的常用方法
  16. POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
  17. Graphics2D的使用详情
  18. 大厂面试:一个四年多经验程序员的BAT面经(转载)
  19. 【asp.net】MVC中cshtml页面Razor语法大全(综合实例)
  20. ResponseEntity

热门文章

  1. 网卡驱动学习四、mac80211概览
  2. 中国雅虎邮箱停止服务 用户直呼受伤
  3. commandos 系列
  4. 变频器压频比的正确设置
  5. 雅虎14条性能优化规则总结:
  6. 网页文字无法选择【解决办法】
  7. 旗鱼云梯linux云面板简介
  8. [1]心之所向,素履以往
  9. 基于vue3,popperjs下拉框简易实现
  10. JavaScript 中双引号、单引号和反引号的区别